interfaz - qt tutorial español
¿Cómo guardo el tamaño de la ventana entre sesiones en Qt? (4)
Descubrí que una combinación de todas las respuestas anteriores era necesaria en Fedora 14. ¡Tenga cuidado de no guardar el tamaño y la posición cuando la ventana esté maximizada!
void MainWindow::writePositionSettings()
{
QSettings qsettings( "iforce2d", "killerapp" );
qsettings.beginGroup( "mainwindow" );
qsettings.setValue( "geometry", saveGeometry() );
qsettings.setValue( "savestate", saveState() );
qsettings.setValue( "maximized", isMaximized() );
if ( !isMaximized() ) {
qsettings.setValue( "pos", pos() );
qsettings.setValue( "size", size() );
}
qsettings.endGroup();
}
void MainWindow::readPositionSettings()
{
QSettings qsettings( "iforce2d", "killerapp" );
qsettings.beginGroup( "mainwindow" );
restoreGeometry(qsettings.value( "geometry", saveGeometry() ).toByteArray());
restoreState(qsettings.value( "savestate", saveState() ).toByteArray());
move(qsettings.value( "pos", pos() ).toPoint());
resize(qsettings.value( "size", size() ).toSize());
if ( qsettings.value( "maximized", isMaximized() ).toBool() )
showMaximized();
qsettings.endGroup();
}
En main (), las configuraciones de posición se leen antes de mostrar la ventana la primera vez ...
MainWindow mainWindow;
mainWindow.readPositionSettings();
mainWindow.show();
... y estos controladores de eventos actualizan la configuración según sea necesario. (Esto causa una escritura en el archivo de configuración para cada movimiento del mouse durante el movimiento y cambio de tamaño que no es ideal).
void MainWindow::moveEvent( QMoveEvent* )
{
writePositionSettings();
}
void MainWindow::resizeEvent( QResizeEvent* )
{
writePositionSettings();
}
void MainWindow::closeEvent( QCloseEvent* )
{
writePositionSettings();
}
Aún así, el componente vertical de la posición no es del todo correcto, parece estar ignorando la altura de la barra de título de la ventana ... si alguien sabe cómo lidiar con eso, hágamelo saber :)
Tengo un QMainWindow en una aplicación Qt. Cuando lo cierre, quiero que almacene su tamaño actual de restauración (el tamaño de la ventana cuando no está maximizado). Esto funciona bien cuando cierro la ventana en modo de restauración (es decir, no maximizado). Pero si cierro la ventana si está maximizada, la próxima vez que inicie la aplicación y restaure la aplicación (porque se inicia en modo maximizado), entonces no recuerda el tamaño en que debería restaurarse. ¿Hay alguna forma de hacer esto?
La imagen en http://qt-project.org/doc/qt-4.8/application-windows.html muestra que geometry.x()
y geometry.y()
no son iguales a x()
y y()
, que son lo mismo que pos()
.
En mi caso, uso:
x()
y()
width()
height()
y restaurarlos exitosamente con:
move()
resize()
Me he encontrado con este problema también.
Qué puede hacer: además del tamaño de la ventana, guarde si está maximizado o no ( QWidget::isMaximized()
).
Luego, la próxima vez que inicie la aplicación, primero configure el tamaño ( QWidget::resize()
) y luego QWidget::showMaximized()
si corresponde ( QWidget::showMaximized()
). Cuando se restaure, debería volver al tamaño correcto.
Utilice la función QWidget::saveGeometry para escribir la configuración actual en el registro. (Se accede al registro usando QSettings). Luego use restoreGeometry () al inicio para regresar al estado anterior.