我开始学习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”填充内容吗?
谢谢!
答案 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
上的这些测试仍然受到高度鼓励:它使您的代码更清晰,更易于维护。