我有一个派生自QDialog
的类。我有一个静态实例,我使用exec
多次显示。如果用户手动调整对话框的大小,我希望将来调用exec
以先前的大小启动它。
我已经看到了一些使用QSettings
的示例,但似乎应该有一个更简单的解决方案,因为我在内存中仍然有相同的QDialog
实例(我也不会#39} ; t必然希望设置在应用程序运行之间保持不变。
最简单的方法是让对话框实例记住上次调用exec
时的大小?
答案 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上保存大小,你需要将它们保存到那些方法中的变量中(它们都是虚方法,并且可以实现以类似的方式)。