【问题标题】:QTableView has unwanted checkboxes in every cellQTableView 在每个单元格中都有不需要的复选框
【发布时间】:2011-01-24 16:50:02
【问题描述】:

我刚刚开始使用 Qt 编程,我正在尝试使用 QTableView 控件和我自己创建的模型类从 QAbstractTableModel 继承来制作一个简单的表格数据布局。出于某种原因,我的表格视图最终看起来像这样:


(来源:nerdland.net

每个单元格中那些看起来像复选框(但当我单击它们时不做任何事情)的东西到底是什么,我该如何让它们消失?除了对象的名称之外,我没有更改任何 QTableView 属性。

如果重要的话,我的模型代码很简单:

MyTableModel::MyTableModel(QObject* parent)
  : QAbstractTableModel(parent)
{
}

MyTableModel::~MyTableModel()
{
}

int MyTableModel::rowCount(const QModelIndex& parent) const
{
  return 1000; 
}

int MyTableModel::columnCount(const QModelIndex& parent) const
{
  return 5;
}

QVariant MyTableModel::data(const QModelIndex& index, int role) const
{
  return "Foo";
}

对话框 UI 是在 Qt Designer 中构建的,在对话框的类中,我将模型附加到视图,如下所示:

MyTableModel testModel = new MyTableModel(this);
ui.testTable->setModel(testModel);

除此之外,我没有对ui.testTable 执行任何操作。

使用 Qt 4.6。

【问题讨论】:

    标签: c++ qt qt4 qtableview


    【解决方案1】:

    您是否碰巧在flags() 中设置了Qt::ItemIsUserCheckable 标志?

    【讨论】:

    • 不,即使我覆盖 flags 以返回 `QAbstractTableModel::flags(index) & ~Qt::ItemIsUserCheckable;`,复选框仍然存在。
    【解决方案2】:

    尝试将MyTableModel::data() 更改为以下内容:

    QVariant MyTableModel::data(const QModelIndex& index, int role) const
    {
        if (role == Qt::DisplayRole)
            return "foo";
        else
            return QVariant();
    }

    可能为角色 Qt::CheckStateRole 返回的 QVariant 被 QTableView 误解了。

    【讨论】:

    • 完美!谢谢你。我想我不应该只是忽略我尚未了解的参数......
    • 很高兴为您提供帮助 :) Qt 简直太棒了!
    • 感谢您的最后一句“可能为角色 Qt::CheckStateRole 返回的 QVariant 被 QTableView 误解了。” :) 因为我想为我的 QTableView 启用编辑,所以我禁用了我的角色 == Qt::DisplayRole 检查并得到了那些愚蠢的复选框。感谢您的评论,我现在明确检查 Qt::DisplayRole 和 Qt::EditRole 并在其他情况下返回 QVariant()。
    • 如果有人使用带有 QVariant 版本 2 的 pyqt 并且根本没有类 QVariant,返回 None 就可以了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多