ダイアログボックスにチェックボックス、オプションなどのコントロールがあるとすると、Qtでダイアログの状態を保存するにはどうすればよいですか?
QSettingsまたは他のものを使用する必要がありますか?
ありがとう。
ダイアログボックスにチェックボックス、オプションなどのコントロールがあるとすると、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);
}
}
これが私の後の誰かに役立つことを願っています。
QSettingsは必要なものに対しては正常に機能しますが、基本的にはオプションをシリアル化して起動時に再ロードするだけなので、Qtでの実行に関するドキュメントはたくさんあります。