我揮動QStandardItemModel
支持QListView
。在某些情況下,QStandardItem
被檢查。除了項目的顯示外,還會顯示一個複選框。在某些時候,我想刪除隱藏QStandardItem
複選框。我將它的可檢查狀態設置爲false,但它不隱藏複選框(儘管它不能再被檢查)。隱藏QListView項目中的複選框
我發現隱藏複選框的唯一方法是用新的項目替換項目。這似乎不是前面的正確方法。
這是代碼:
MyModel::MyModel(QObject *parent):QStandardItemModel(parent){}
void MyModel::createItem(int row, const QString &text)
{
setItem(row, new QStandardItem(text));
}
void MyModel::setCheckable(int row)
{
item(row)->setCheckState(Qt::Unchecked);
item(row)->setCheckable(true); // A checkbox appears besides the text
}
void MyModel::hideCheckBox(int row)
{
item(row)->setCheckState(Qt::Unchecked);
item(row)->setCheckable(false); // does not work
// I need to completely replace the item for the checkbox to disapear.
// This doesn't seem the proper way to proceed
setItem(row, new QStandardItem(item(row)->data(Qt::DisplayRole).toString()));
}
有沒有更好的方式來進行呢?
人們預計,setCheckable(假)確實在內部。 –
是的,它會調用'setData(Qt :: Unchecked,Qt :: CheckStateRole);'如果該項目在調用'setCheckable'時不可檢查。當調用'setData'時,它會嘗試在數據映射中添加'Qt :: CheckStateRole'。你可以看到[源代碼](https://qt.gitorious.org/qt/qtbase/source/c8172953ed6d3776178b9a37c0773d648cfdd9f2:src/gui/itemmodels/qstandarditemmodel.cpp)。 –
@Alex謝謝你的回答!而不是通過'itemData()'映射來清除'Qt :: CheckStateRole',寫QVariant()也是一樣的。因此,我的最終代碼將是這一行:'item(row) - > setData(QVariant(),Qt :: CheckStateRole);' – gfrigon