2016-11-14 24 views
0

當構造一個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模型

如何才能做到這一點?

回答

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

如果答案對您有幫助,您可以將其標記爲已接受(在投票箭頭中使用勾號符號)。我很驚訝,即使您還沒有投票決定其他任何事情,您也無法向自己的問題答覆。至少你可以評論這樣的答案。你很快就會有足夠的聲譽,所以不要太擔心! –