显示以前大小的QDialog

时间:2014-05-06 16:58:20

标签: c++ qt qt5

我有一个派生自QDialog的类。我有一个静态实例,我使用exec多次显示。如果用户手动调整对话框的大小,我希望将来调用exec以先前的大小启动它。

我已经看到了一些使用QSettings的示例,但似乎应该有一个更简单的解决方案,因为我在内存中仍然有相同的QDialog实例(我也不会#39} ; t必然希望设置在应用程序运行之间保持不变。

最简单的方法是让对话框实例记住上次调用exec时的大小?

1 个答案:

答案 0 :(得分:1)

在对话框类中使用静态变量,这是一个完整的示例应用程序(使用4.8.x):

#include <QApplication>
#include <QDialog>
#include <QHBoxLayout>
#include <QLabel>
#include <QDebug>

class MyDialog : public QDialog
{
    Q_OBJECT
public:
    MyDialog(QWidget *parent = 0) 
        : QDialog(parent) 
    {
        QHBoxLayout *layout = new QHBoxLayout(this);
        layout->addWidget(new QLabel("Test Label"));
    }

public Q_SLOTS:
    virtual int exec() { 
        resize(s_dialogSize);
        return QDialog::exec();
    }

protected:
    void closeEvent(QCloseEvent *event) { 
        Q_UNUSED(event)
        s_dialogSize = size();
    }

private:
    static QSize s_dialogSize;

};

QSize MyDialog::s_dialogSize;
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    MyDialog dialog;
    qDebug() << dialog.exec();
    qDebug() << dialog.exec();
    qDebug() << dialog.exec();
    return app.exec();
}

#include "main.moc"

我这里只实现了closeEvent,但是如果你想在accept / reject上保存大小,你需要将它们保存到那些方法中的变量中(它们都是虚方法,并且可以实现以类似的方式)。