构建QComboBox()
时,模型最初是“空的”(即没有附加模型)。在使用QComboBox::setModel()
指定模型后,会附加模型。现在,我需要将QComboBox
模型重置为先前的状态:“empty”或“none”。
我有一个名为QCheckBox
的{{1}}和名为chbW1
的QComboBox。在检查cbWaehrung1
之前,未附加任何模型且QCheckBox
为空。如果选中QComboBox
,我会将QCheckBox
的模型设置为QComboBox
。这部分有效。
现在,如果我取消选中wmodel
,我希望QCheckBox
返回上一个状态(空)。但它只会被禁用(通过代码,见下文),保留其索引和文本。如果我再次打开它(检查QComboBox
),旧值(索引和文本)仍然存在。
这是Qt 5.6 - “其他”部分似乎不起作用:
QCheckbox
我也试过像
这样的东西void MainWindow::on_chbW1_toggled(bool checked)
{
ui->cbWaehrung1->setEnabled(checked);
if (checked) {
// working
ui->cbWaehrung1->setModel(this->wmodel);
ui->cbWaehrung1->setModelColumn(1);
ui->cbWaehrung1->setFocus();
} else {
// not working
ui->cbWaehrung1->clear();
ui->cbWaehrung1->clearEditText();
}
}
但这会在编译时出错:
ui->cbWaehrung1->setModel(QAbstractItemModel());
此外:
invalid cast to abstract class type ‘QAbstractItemModel’
ui->cbWaehrung2->setModel(QAbstractItemModel());
^
这会在运行时产生错误:
无法设置0模型
如何做到这一点?
答案 0 :(得分:0)
您可以使用空模型,但请记住setModel()
指向模型的指针,而QAbstractItemModel
(不出所料)是抽象的:
auto *emptyModel = new QStandardItemModel(ui->cbWaehrung2);
ui->cbWaehrung2->setModel(emptyModel);
我们将QComboBox
设置为空模型的父级;这意味着它需要所有权,并在调用setModel()
时删除模型以设置新模型。
如果您不想在每次调用函数时创建新的emptyModel
,则可能希望安排重新使用或删除static QStandardItemModel emptyModel;
ui->cbWaehrung2->setModel(&emptyModel);
。最简单的方法可能是拥有一个静态空模型,只需传递指向该模型的指针:
0xc1