应用程序GUI状态保存在Qt中

时间:2015-11-10 21:18:50

标签: qt user-interface

保存Qt GUI状态的最佳和适当方法是什么,以便在关闭应用程序时获得相同的状态?

按状态我的意思是:关闭应用程序之前的当前索引(用于组合框...),调色板,小部件位置......

3 个答案:

答案 0 :(得分:7)

您可以使用QSettings类。

简单使用QSettings类(代码灵感来自Qt&#39的文档):

在应用程序代码成员函数的主窗口中保存和恢复设置:

void MainWindow::writeSettings()
{
    QSettings settings("reaffer Soft", "reafferApp");

    settings.beginGroup("MainWindow");
    settings.setValue("size", size());
    settings.setValue("pos", pos());
    settings.endGroup();
}

void MainWindow::readSettings()
{
    QSettings settings("reaffer Soft", "reafferApp");

    settings.beginGroup("MainWindow");
    resize(settings.value("size", QSize(400, 400)).toSize());
    move(settings.value("pos", QPoint(200, 200)).toPoint());
    settings.endGroup();
}

从MainWindow构造函数和closeEvent覆盖中调用这两个函数,如下所示:

MainWindow::MainWindow()
{
    // code from constructor
    //...
    readSettings();
}

void MainWindow::closeEvent(QCloseEvent *event)
{
    //optional check if the user really want to quit
    // and/or if the user want to save settings
    writeSettings();
    event->accept();
}

答案 1 :(得分:3)

直接答案需要针对您的代码进行特定的精心设计,而不是真正的Qt问题,甚至是Qt特有的问题。这是关于C ++,它不是基于VM的语言,它有助于将程序代码的状态序列化为数据。让所有对象可序列化后,我们就可以尝试应用某些C ++ / Qt类/技术。

但是,使用Java等语言更容易完成此任务。使用C ++ / Qt,您必须定期进行序列化/序列化/恢复代码中运行的所有内容,并且只要上下文未被完全捕获,仍无法保证可行。这个任务并不容易确定,只有在特定应用中才有意义。

你可以直接从Qt获得的最多是保存/恢复QMainWindow和其他独立小部件几何(位置/大小):

saveGeometry restoreGeometry

...而且该解决方案仍然有些不完整,或者您可能/不使用QSettings进行存储。

答案 2 :(得分:1)

我使用QSettings。使用类似于Zlatomir的例行程序。

对于项目中的每个窗口,我在QSettings中使用不同的部分,并在每个窗口的源代码中使用readSettings()和writeSettings()。

我要坚持表格中的任何内容我必须明确保存和回忆。在QComboBox的情况下,它将类似于:

QSettings settings("Organisation", "MySoftware");
settings.beginGroup("WindowNumberTwo");
settings.setValue("ComboIndex", combobox->currentIndex());
// save more values here
//  ...
settings.endGroup();

我不知道有一种内置的方式来保持你的窗口状态 - 它必须没有价值。