在我们的应用程序中,我们使用可定制的对话框。
QSplitter
,以便我们的客户可以重新排列对话框以满足他们的需要。
(有时我们也使用
QDockWidget
,但这似乎是相似的。)
现在,每当对话框再次打开时重新排列它是非常烦人的。甚至在程序的不同开始之间。
在查阅了文档之后,我能够恢复包含一个特定对话框的状态和几何图形
切分窗口
.
#include <QApplication>
#include <QLabel>
#include <QDebug>
#include <QSplitter>
#include <QPushButton>
#include <QTextEdit>
#include <QDialog>
#include <QSettings>
#include <QHBoxLayout>
int main(int argc, char** args) {
QApplication app(argc, args);
app.setOrganizationName("Tech");
app.setOrganizationDomain("qt.us");
app.setApplicationName("RestoreLayout");
app.setApplicationVersion("1.0");
QDialog dialog;
dialog.setLayout(new QHBoxLayout);
auto splitter = new QSplitter;
splitter->addWidget(new QLabel("Left"));
splitter->addWidget(new QLabel("Right"));
dialog.layout()->addWidget(splitter);
auto accept = new QPushButton("Accept");
accept->connect(accept, &QPushButton::clicked, [&](){
dialog.accept();
});
splitter->addWidget(accept);
auto geom= QSettings().value("Geom").toByteArray();
auto splitterState = QSettings().value("State").toByteArray();
qDebug() << geom;
qDebug() << splitterState;
dialog.restoreGeometry(geom);
splitter->restoreState(splitterState);
dialog.show();
dialog.connect(&dialog, &QDialog::accepted, [&]() {
QSettings().setValue("Geom", dialog.saveGeometry());
QSettings().setValue("State", splitter->saveState());
app.quit();
});
app.exec();
}
不幸的是,这似乎是一种方法,一般来说是不可用的。
假设有一个任意对话框,需要恢复其几何图形和状态。偶数者
切分窗口
和
小精灵
甚至可以以嵌套的方式使用,这是在我们的应用程序中完成的。
外部程序员如何恢复可能容易适用于所有可能对话框的任意对话框的几何图形和状态?