集QComboBox模型为无

问题描述:

当构造一个QComboBox(),该模型是初始的“空”(即没有附加模型)。在分配模型QComboBox::setModel()后,附上模型。现在,我需要将QComboBox模型重置为之前的状态:“空”或“无”。集QComboBox模型为无

我有一个叫chbW1QCheckBox以及名为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); 
+0

谢谢。看起来像我去那个第二版。想升职但我的“声誉”太低。多么奇怪;-) – WKarl

+0

如果答案对您有帮助,您可以将其标记为已接受(在投票箭头中使用勾号符号)。我很惊讶,即使您还没有投票决定其他任何事情,您也无法向自己的问题答复。至少你可以评论这样的答案。你很快就会有足够的声誉,所以不要太担心! –