Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Qt中保存对话框的状态?_Qt - Fatal编程技术网

如何在Qt中保存对话框的状态?

如何在Qt中保存对话框的状态?,qt,Qt,假设对话框中有复选框、选项等控件,如何在Qt中保存对话框的状态 我应该使用QSettings还是其他什么 谢谢。QSettings可以很好地满足您的需要,但是您基本上只是序列化选项并在启动时重新加载它们,因此有大量关于在Qt中执行此操作的文档。我遇到了同样的问题。 谷歌搜索帮不了什么忙。 所以最后我写了自己的解决方案 我创建了一组函数,分别在创建对话框时读取和写入每个子控件的状态。 它是通用的,可用于任何对话框 它的工作原理如下: Dialog::Dialog(QWidget *parent)

假设对话框中有复选框、选项等控件,如何在Qt中保存对话框的状态

我应该使用QSettings还是其他什么


谢谢。

QSettings可以很好地满足您的需要,但是您基本上只是序列化选项并在启动时重新加载它们,因此有大量关于在Qt中执行此操作的文档。

我遇到了同样的问题。 谷歌搜索帮不了什么忙。 所以最后我写了自己的解决方案

我创建了一组函数,分别在创建对话框时读取和写入每个子控件的状态。 它是通用的,可用于任何对话框

它的工作原理如下:

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    QMoMSettings::readSettings(this);
}

Dialog::~Dialog()
{
    QMoMSettings::writeSettings(this);
    delete ui;
}

...

void QMoMSettings::readSettings(QWidget* window)
{
    QSettings settings;

    settings.beginGroup(window->objectName());
    QVariant value = settings.value("pos");
    if (!value.isNull())
    {
        window->move(settings.value("pos").toPoint());
        window->resize(settings.value("size").toSize());
        recurseRead(settings, window);
    }
    settings.endGroup();
}

void QMoMSettings::writeSettings(QWidget* window)
{
    QSettings settings;

    settings.beginGroup(window->objectName());
    settings.setValue("pos", window->pos());
    settings.setValue("size", window->size());
    recurseWrite(settings, window);
    settings.endGroup();
}

void QMoMSettings::recurseRead(QSettings& settings, QObject* object)
{
    QCheckBox* checkbox = dynamic_cast<QCheckBox*>(object);
    if (0 != checkbox)
    {
        checkbox->setChecked(settings.value(checkbox->objectName()).toBool());
    }
    QComboBox* combobox = dynamic_cast<QComboBox*>(object);
    if (0 != combobox)
    {
        combobox->setCurrentIndex(settings.value(combobox->objectName()).toInt());
    }
    ...

    foreach(QObject* child, object->children())
    {
        recurseRead(settings, child);
    }
}

void QMoMSettings::recurseWrite(QSettings& settings, QObject* object)
{
    QCheckBox* checkbox = dynamic_cast<QCheckBox*>(object);
    if (0 != checkbox)
    {
        settings.setValue(checkbox->objectName(), checkbox->isChecked());
    }
    QComboBox* combobox = dynamic_cast<QComboBox*>(object);
    if (0 != combobox)
    {
        settings.setValue(combobox->objectName(), combobox->currentIndex());
    }
    ...

    foreach(QObject* child, object->children())
    {
        recurseWrite(settings, child);
    }
}
Dialog::Dialog(QWidget*父项):
QDialog(父级),
ui(新建ui::对话框)
{
用户界面->设置用户界面(此);
QMoMSettings::readSettings(此);
}
对话::~Dialog()
{
QMoMSettings::writeSettings(此);
删除用户界面;
}
...
void QMoMSettings::readSettings(QWidget*窗口)
{
QSettings设置;
beginGroup(窗口->对象名());
QVariant value=设置值(“pos”);
如果(!value.isNull())
{
窗口->移动(settings.value(“pos”).toPoint());
窗口->调整大小(settings.value(“size”).toSize());
递归读取(设置、窗口);
}
settings.endGroup();
}
无效QMoMSettings::writeSettings(QWidget*窗口)
{
QSettings设置;
beginGroup(窗口->对象名());
settings.setValue(“pos”,窗口->pos());
settings.setValue(“大小”,窗口->大小());
递归写入(设置、窗口);
settings.endGroup();
}
void QMoMSettings::recurseRead(QSettings&settings,QObject*object)
{
QCheckBox*复选框=动态强制转换(对象);
如果(0!=复选框)
{
checkbox->setChecked(settings.value(checkbox->objectName()).toBool());
}
QComboBox*组合框=动态_转换(对象);
如果(0!=组合框)
{
combobox->setCurrentIndex(settings.value(combobox->objectName()).toInt());
}
...
foreach(QObject*child,object->children())
{
递归读取(设置,子级);
}
}
void QMoMSettings::recurseWrite(QSettings&settings,QObject*object)
{
QCheckBox*复选框=动态强制转换(对象);
如果(0!=复选框)
{
settings.setValue(checkbox->objectName(),checkbox->isChecked());
}
QComboBox*组合框=动态_转换(对象);
如果(0!=组合框)
{
setValue(组合框->对象名(),组合框->当前索引());
}
...
foreach(QObject*child,object->children())
{
递归写入(设置,子级);
}
}
希望这对我以后的人有帮助