gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 17:43:07 27 4
gpt4 key购买 nike

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

我应该使用 QSettings 还是其他东西?

谢谢。

最佳答案

我也遇到了同样的问题。谷歌搜索并没有太大帮助。所以最后我写了自己的解决方案。

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

它的工作原理如下:

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);
}
}

希望这对我之后的人有所帮助。

关于qt - 如何在 Qt 中保存对话框的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11185020/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com