代码之家  ›  专栏  ›  技术社区  ›  Aleph0

恢复任意qdialog的几何和状态

  •  0
  • Aleph0  · 技术社区  · 6 年前

    在我们的应用程序中,我们使用可定制的对话框。 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();
    }
    

    不幸的是,这似乎是一种方法,一般来说是不可用的。

    假设有一个任意对话框,需要恢复其几何图形和状态。偶数者 切分窗口 小精灵 甚至可以以嵌套的方式使用,这是在我们的应用程序中完成的。

    外部程序员如何恢复可能容易适用于所有可能对话框的任意对话框的几何图形和状态?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Deep    6 年前

    要保存qdockwidget的状态,每个状态都必须命名为:dock widget n->setobjectname(“dock-widget-n”);

    但是您只能保存qmainwindow状态,以便在此窗口中保存停靠的状态。

    您可以通过qsettings(它是qbytearray)分离保存状态,并对许多窗口使用某个状态。

    请参见这里: How to save state of a dialog in Qt?