在我们的应用程序中,我们使用了可自定义的对话框QSplitter
,以便我们的客户可以重新排列对话框以满足他们的需求。
(有时我们也使用QDockWidget
,但这似乎是相似的。)
现在,每次再次打开对话框时都重新排列对话框非常烦人。甚至在程序的不同启动之间。
在查阅文档后,我能够恢复包含QSplitter
.
#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();
}
不幸的是,这似乎是一种方法,通常不可用。
假设有一些任意对话框需要恢复其几何形状和状态。更糟糕的是QSplitter
,甚至QDockWidget
可能以嵌套方式使用,这是在我们的应用程序中完成的。
外部程序员如何恢复可以轻松应用于所有可能对话框的任意对话框的几何形状和状态?