Qt QAbstractModel:删除复选框

时间:2012-08-30 12:39:00

标签: qt qtableview qabstracttablemodel

我开始学习Qt,我想通过QTableView实现一个填充数据的表。我的问题是,我不知道如何从单元格中删除复选框。看起来他们默认投入使用。

但是,我读到我必须返回一个NULL-QVariant,但这不是我想要的,因为我仍然有数据可以放入。

到目前为止,这是我的代码:

QVariant MyModel::data(const QModelIndex &index, int role) const
{
int row = index.row();
int col = index.column();
QString daten;

switch (col)
{
case 0:
{
    daten = "column 1";
    break;
}
case 1:
{
    daten = "column 2";
    break;
}
case 2:
{
    daten = "column 3";
    break;
}
case 3:
{
    daten = "column 4";
    break;
}
}

return daten;
}

现在,正如您所看到的,我想用名为“daten”的QString填充单元格。但是在String旁边,每个单元格都有一个Checkbox。

有人知道如何删除复选框但仍然用“daten”填充内容吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

QTableView中的单元格有一些复选框暗示它们被定义为用户可检查的事实。检查您的Qt.ItemIsUserCheckable定义中是否未激活QTableView标记,如果是这种情况,请将其停用。您可以尝试修改flags方法,例如,强制每个条目可检查

作为附加评论,您应该修改::data方法,以考虑index无效的情况,并仅在角色与Qt.DisplayRole对应时返回一些值。在Python中,语法是

if index.isvalid():
    if (role == Qt.DisplayRole):
        (row, col) = (index.row(), index.column()
        return_something_depending_on_col
    return QVariant()
return QVariant()

这样,您可以覆盖无效索引的情况,否则您的代码可能会崩溃。

role上的测试允许您选择要访问的数据类型。 documentation表示例如:

  

模型中的每个项目都有一组与之关联的数据元素,每个元素都有自己的角色。视图使用这些角色向模型指示它需要哪种类型的数据。自定义模型应返回这些类型的数据。

基本角色为Qt.DisplayRole,您可以在其中返回与当前单元格对应的QString。如果您的角色为QBrush ...

,您还可以返回Qt.BackgroundRole来绘制背景

虽然不是强制性的,但role上的这些测试仍然受到高度鼓励:它使您的代码更清晰,更易于维护。