集QComboBox模型为无
问题描述:
当构造一个QComboBox()
,该模型是初始的“空”(即没有附加模型)。在分配模型QComboBox::setModel()
后,附上模型。现在,我需要将QComboBox
模型重置为之前的状态:“空”或“无”。集QComboBox模型为无
我有一个叫chbW1
的QCheckBox
以及名为cbWaehrung1
的QComboBox。在检查QCheckBox
之前,未附加任何型号,并且QComboBox
为空。如果选中QCheckBox
,我将QComboBox
的型号设置为wmodel
。这部分工作。
现在,如果我取消选中QCheckBox
,我希望QComboBox
返回到先前的状态(空)。但它只会被禁用(通过代码,见下文),保持其索引和文本。如果我再次打开它(检查QCheckbox
),旧值(索引和文本)仍然存在。
这是Qt的5.6 - 在“其他”部分似乎不工作:像
ui->cbWaehrung1->setModel(QAbstractItemModel());
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();
}
}
我也尝试过的东西,但是这给在编译时错误:
invalid cast to abstract class type ‘QAbstractItemModel’ ui->cbWaehrung2->setModel(QAbstractItemModel()); ^
另外:
ui->cbWaehrung1->setModel(0);
这在运行时产生一个错误:
不能设置0模型
如何才能做到这一点?
答
你可以使用一个空模型,但记住setModel()
需要一个指向模型,并QAbstractItemModel
是(意料之中)摘要:
auto *emptyModel = new QStandardItemModel(ui->cbWaehrung2);
ui->cbWaehrung2->setModel(emptyModel);
我们设置QComboBox
为空模型的父母;这意味着它取得所有权,并在调用setModel()
来设置新模型时删除模型。
您可能希望安排emptyModel
被重用或删除的,如果你不希望创建一个新的每个函数被调用时。最简单的方法可能是有一个静态的空模型,只需传递一个指针即可:
static QStandardItemModel emptyModel;
ui->cbWaehrung2->setModel(&emptyModel);
谢谢。看起来像我去那个第二版。想升职但我的“声誉”太低。多么奇怪;-) – WKarl
如果答案对您有帮助,您可以将其标记为已接受(在投票箭头中使用勾号符号)。我很惊讶,即使您还没有投票决定其他任何事情,您也无法向自己的问题答复。至少你可以评论这样的答案。你很快就会有足够的声誉,所以不要太担心! –