كيف يمكنني تخزين حجم النافذة بين الدورات في Qt ؟

StackOverflow https://stackoverflow.com/questions/74690

  •  09-06-2019
  •  | 
  •  

سؤال

لدي QMainWindow في تطبيق Qt.عندما أغلق ذلك أريد أن متجر الحالي استعادة الحجم (حجم النافذة عندما لا تكبير).هذا يعمل بشكل جيد عندما أغلق النافذة في وضع استعادة (غير مكبر).ولكن إذا أغلق النافذة إذا كان أقصى حد ، ثم في المرة القادمة بدء تشغيل التطبيق و إعادة التطبيق (لأنه يبدأ في وضع تكبير) ، ثم فإنه لا تذكر حجم ينبغي أن استعادة.هل هناك طريقة لعمل هذا ؟

هل كانت مفيدة؟

المحلول

استخدام QWidget::saveGeometry ميزة كتابة الإعدادات الحالية إلى التسجيل.(التسجيل يتم الوصول إليها باستخدام QSettings).ثم استخدام restoreGeometry() عند بدء التشغيل إلى العودة إلى الحالة السابقة.

نصائح أخرى

لقد وجدت أن الجمع بين جميع الإجابات السابقة هنا كان من الضروري على فيدورا 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