0

我开始学习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 填充单元格。但在字符串旁边,每个单元格中都有一个复选框。

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

谢谢!

4

1 回答 1

2

您中的单元格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允许您选择要访问的数据类型。例如,文档指出:

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

基本作用是Qt.DisplayRole,在其中返回QString与当前单元格对应的位置。如果您的角色是...,您也可以返回QBrush用于绘制背景的Qt.BackgroundRole...

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

于 2012-09-01T13:51:36.300 回答