我尝试将QAbstractListModel子类化,以存储每个都有字符串和bool的项目。在我看来,支票是虚线而不是实线,我可以选中以前未选中的方框,但我无法取消选中已检查的方框。
http://programmingexamples.net/wiki/Qt/ModelView/AbstractListModelCheckable
我还需要做些什么来让它们像普通的复选框一样工作吗?
答案 0 :(得分:3)
在我看来,就像你的bool< - > Qt :: CheckState转换出错了,你最终得到Qt :: PartiallyChecked(值1),你想要Qt :: Checked。
从您的data()实现::
if(role == Qt::CheckStateRole)
{
return this->Items[index.row()].Displayed;
}
这看起来不错。你正在返回一个预期有Qt :: CheckState的bool。 尝试:
if(role == Qt::CheckStateRole)
{
return this->Items[index.row()].Displayed ? Qt::Checked : Qt::Unchecked;
}
还相应地调整你的setData()实现:
this->Items[index.row()].Displayed = static_cast<Qt::CheckState>(value.toUInt()) == Qt::Checked;
替代方案:将Displayed
设为Qt::CheckState
。