Tengo 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?¿Cómo guardo el tamaño de la ventana entre sesiones en Qt?
Respuesta
Utilice la función QWidget::saveGeometry para escribir la configuración actual en el registro. (Se puede acceder al registro usando QSettings). Luego use restoreGeometry() al inicio para regresar al estado anterior.
He encontrado 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 maximícelo si corresponde (QWidget::showMaximized()
). Cuando se restaure, debería volver al tamaño correcto.
funciona bien para mí, no importa si maximizada o no. Como la pregunta tiene 5 años, supongo que es por las actualizaciones de Qt. –
Encontré que una combinación de todas las respuestas anteriores aquí era necesaria en Fedora 14. ¡Tenga cuidado no para 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(), los ajustes de posición se leen antes de mostrar la ventana de la primera vez ...
MainWindow mainWindow;
mainWindow.readPositionSettings();
mainWindow.show();
... y estos controladores de eventos actualizar los ajustes según sea necesario. (Esto provoca una escritura en la configuración del archivo para cada movimiento del ratón durante el movimiento y cambiar el tamaño de los cuales no es ideal.)
void MainWindow::moveEvent(QMoveEvent*)
{
writePositionSettings();
}
void MainWindow::resizeEvent(QResizeEvent*)
{
writePositionSettings();
}
void MainWindow::closeEvent(QCloseEvent*)
{
writePositionSettings();
}
Aún así, la componente vertical de la posición no es del todo bien, 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 :)
excelente respuesta: ¡este código funciona como un encanto en Mac OSX!:-) al hacer algunas configuraciones al principio se elimina la duplicación de código cuando se accede a la configuración desde muchos lugares, consulte http://developer.qt.nokia.com/doc/qt-4.8/qsettings.html#basic-usage – ssc
Intenté obtener es correcto, pero no se molestó en pasar tanto tiempo hasta que encontré el código de muestra que funciona como un amuleto. :) – Devolus
la imagen muestra a http://qt-project.org/doc/qt-4.8/application-windows.html, que geometry.x()
y geometry.y()
no son iguales a x()
y y()
, que son los mismos que pos()
.
En mi caso, utilizo:
x()
y()
width()
height()
y restaurar estos exitosamente con:
move()
resize()
- 1. .NET WPF Recuerde el tamaño de la ventana entre las sesiones
- 2. ¿Cómo cambiar el título de la ventana en Qt?
- 3. Cómo eliminar el botón Maximizar en la ventana de la herramienta Mac OS X en Qt
- 4. QT/QT-Designer Pregunta: widget de cambio de tamaño automático
- 5. ¿Cómo configuro el tamaño de la ventana/pantalla en xna?
- 6. Sesiones: límites de tamaño de sesión
- 7. Qt: cómo cambiar el tamaño de una ventana a su nuevo contenido
- 8. La relación existente entre el tamaño de la ventana y el número de secuencia
- 9. ¿Cómo guardo una imagen graficada y mantengo el tamaño de la imagen original en MATLAB?
- 10. Qt: ¿cómo establecer la posición inicial de la ventana principal?
- 11. ¿Cómo guardo la configuración de usuario de preferencias en Java?
- 12. ¿Dónde guardo el nombre de usuario y el ID de usuario? sesiones o cookie?
- 13. Hacer una ventana de Qt con ajuste automático al tamaño de la pantalla
- 14. Tamaño de la ventana emergente en android
- 15. ¿Cómo puedo detectar el tamaño de la ventana con jQuery?
- 16. PHPExcel - Cómo configurar el tamaño predeterminado de la ventana
- 17. JavaFX ¿Cómo establecer el tamaño máximo/mínimo de la ventana?
- 18. CGI :: sesiones de intercambio de sesiones entre los clientes!
- 19. Ventana con textura de cacao en Qt
- 20. GWT cambiar el tamaño y el centro de la ventana emergente cuando el tamaño de la ventana del navegador
- 21. Obteniendo el tamaño de un Objeto Qt
- 22. Cambiar el tamaño de la ventana wpf programáticamente en C#
- 23. Ancho mínimo en el cambio de tamaño de la ventana
- 24. cambiar el tamaño del texto (tamaño de fuente) al cambiar el tamaño de la ventana?
- 25. Qt C++ minimiza y maximiza la ventana
- 26. Disminuir el tamaño de la aplicación GUI de Qt
- 27. ¿Cómo cambiar el tamaño de la altura máxima de un div al cambiar el tamaño de la ventana?
- 28. ExtJS: Cambia automáticamente el tamaño de los campos de formulario en el tamaño de la ventana
- 29. Cambiar el tamaño de Colorbox en el tamaño de la ventana
- 30. Cambiar el tamaño de la ventana con actionscript 3.0
Si también desea guardar las posiciones y el estado de dockwidgets, no solo el tamaño, debe usar QWidget :: saveState() – mtbkrdave
Desafortunadamente, de esta manera no funciona para un caso cuando tiene una ventana maximizada en un segundo monitor (al menos en Windows 7). La geometría después de restaurar maximiza la ventana en el primer monitor. Uso el enfoque similar a la respuesta de iforce2d para resolver esto. –
Nota: ya no hay 'QWidget :: saveState()'. Al menos, no está en Qt 4.8 o 5.7. 'saveState()' parece estar presente solo en 'QMainWindow'. – Len