保存Qt GUI状态的最佳和适当方法是什么,以便在关闭应用程序时获得相同的状态?
按状态我的意思是:关闭应用程序之前的当前索引(用于组合框...),调色板,小部件位置......
答案 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和其他独立小部件几何(位置/大小):
...而且该解决方案仍然有些不完整,或者您可能/不使用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();
我不知道有一种内置的方式来保持你的窗口状态 - 它必须没有价值。