В наших приложениях мы используем настраиваемые диалоги, используя исчерпывающе 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
могут даже использоваться во вложенном порядке, что делается в наших приложениях.
Как сторонний программист может восстановить геометрию и состояние произвольного диалога, который может быть легкоприменимо ко всем возможным диалогам?