QAbstractListModel中的复选框表现不正常

时间:2011-12-18 15:03:05

标签: qt qt4

我尝试将QAbstractListModel子类化,以存储每个都有字符串和bool的项目。在我看来,支票是虚线而不是实线,我可以选中以前未选中的方框,但我无法取消选中已检查的方框。

http://programmingexamples.net/wiki/Qt/ModelView/AbstractListModelCheckable

我还需要做些什么来让它们像普通的复选框一样工作吗?

1 个答案:

答案 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