0
QDataWidgetMapperを使用してQTableView行のデータを更新するフォームダイアログQDialogがあります。このアイテムにはQStringデータが含まれていますが、QCheckboxを表示し、QCheckboxの動的プロパティを使用して状態変更時にバックグラウンドで値を設定したいだけです。QDataWidgetMapperでオブジェクトの動的プロパティを元に戻すにはどうすればいいですか?
すべて(toFirst、toLast、toNext、toPrevious、submit)は、のように動作しますが、復帰はの状態を元に戻しません。
私は使用できるシグナルがありますか?または、復帰スロットを無効にする必要がありますか?なにか提案を?
(シンプルに保つために除去他のウィジェットのコード)
EditDialog::EditDialog(QStandardItemModel &model, QModelIndex ¤t, QWidget *parent)
: QDialog(parent)
{
cbHomeCLI = new QCheckBox();
// other widgets ......
dataMapper->setModel(&model);
dataMapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
dataMapper->addMapping(cbHomeCLI,3,"useCLI");
// button connects for toFirst, toXXXX, ..., here ....
connect(bttnDiscard,&QPushButton::clicked,dataMapper,&QDataWidgetMapper::revert);
connect(cbHomeCLI,&QCheckBox::stateChanged,this,&EditDialog::changeProperty);
connect(dataMapper,&QDataWidgetMapper::currentIndexChanged,this,&EditDialog::initState);
QGridLayout *layout(new QGridLayout());
layout->addWidget(cbHomeCLI,2,2);
setLayout(layout);
setWindowTitle("....");
dataMapper->setCurrentModelIndex(current);
}
void EditDialog::initState(int row)
{
QStandardItemModel *mdl = qobject_cast<QStandardItemModel *>(dataMapper->model());
if (mdl->item(row,3)->text() == "*31#")
cbHomeCLI->setChecked(true);
else
cbHomeCLI->setChecked(false);
}
void EditDialog::changeProperty(int state)
{
QCheckBox *from = qobject_cast<QCheckBox *>(sender());
if (state)
from->setProperty("useCLI",QString("*31#"));
else
from->setProperty("useCLI",QString(""));
}