문제

Qt 애플리케이션에 QMainWindow가 있습니다.닫을 때 현재 복원 크기(최대화되지 않은 창의 크기)를 저장하고 싶습니다.이는 복원 모드(즉, 최대화되지 않음)에서 창을 닫을 때 잘 작동합니다.하지만 최대화된 창을 닫으면 다음에 응용 프로그램을 시작하고 응용 프로그램을 복원할 때(최대화 모드에서 시작하기 때문에) 복원해야 할 크기를 기억하지 못합니다.이를 수행할 수 있는 방법이 있습니까?

도움이 되었습니까?

해결책

사용 QWidget::saveGeometry 현재 설정을 레지스트리에 기록하는 기능입니다. (레지스트리는 QSettings를 사용하여 액세스됩니다)그런 다음 시작 시 RestoreGeometry()를 사용하여 이전 상태로 돌아갑니다.

다른 팁

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();
}

그래도 위치의 수직성분이 좀 안맞아서 창 타이틀바 높이를 무시한거같은데...누군가 그것을 처리하는 방법을 알고 있다면 알려주세요 :)

나도 이 문제에 직면했다.

당신이 할 수 있는 일:창 크기 외에도 최대화 여부를 저장합니다(QWidget::isMaximized()).

그런 다음 다음에 응용 프로그램을 시작할 때 먼저 크기(QWidget::resize()) 그런 다음 적절한 경우 이를 최대화합니다(QWidget::showMaximized()).복원되면 올바른 크기로 돌아갑니다.

이미지는 http://qt-project.org/doc/qt-4.8/application-windows.html 것을 보여줍니다 geometry.x() 그리고 geometry.y() 같지 않다 x() 그리고 y(), 이는 다음과 같습니다. pos().

내 경우에는 다음을 사용합니다.

x()
y()
width()
height()

다음을 사용하여 성공적으로 복원합니다.

move()
resize()
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top