Я обнаружил, что комбинация всех предыдущих ответов здесь была необходима в Fedora 14. Будьте осторожны , а не , чтобы сохранить размер и положение, когда окно развернуто!
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();
}
В main () считываются настройки положения перед первым отображением окна ...
MainWindow mainWindow;
mainWindow.readPositionSettings();
mainWindow.show();
... и эти обработчики событий обновляют настройки по мере необходимости. (Это приводит к записи в файл настроек для каждого движения мыши во время перемещения и изменению размера, что не является идеальным.)
void MainWindow::moveEvent( QMoveEvent* )
{
writePositionSettings();
}
void MainWindow::resizeEvent( QResizeEvent* )
{
writePositionSettings();
}
void MainWindow::closeEvent( QCloseEvent* )
{
writePositionSettings();
}
Тем не менее, вертикальная составляющая позиции не совсем правильная, похоже, она игнорирует высоту строки заголовка окна ... если кто-нибудь знает, как с этим бороться, дайте мне знать:)