QTableView中的可编辑复选框仅列

Posted

技术标签:

【中文标题】QTableView中的可编辑复选框仅列【英文标题】:Editable checkbox only column in QTableView 【发布时间】:2015-01-04 23:49:42 【问题描述】:

我在QTableView 中有一个带有复选框的列。复选框由以下方式生成:

    在覆盖的 flags 成员函数中返回 Qt::ItemIsUserCheckable 在被覆盖的data() 函数中,我根据数据为role == Qt::CheckStateRole 返回一个Qt::CheckState

有效,见截图。

但在复选框旁边,我在列中有一些可编辑的文本框。 我怎样才能摆脱这个文本框(我在其中输入了“dsdsdsds”进行演示?澄清一下,复选框应该是可编辑的,但没有别的。


根据要求,我只能显示简化版

Qt::ItemFlags MyClass::flags(const QModelIndex &index) const 
 Qt::ItemFlags f = QAbstractListModel::flags(index);
 ... return f if index is not target column ....
 // for target column with checkbox
 return (f | Qt::ItemIsEditable | Qt::ItemIsUserCheckable; )



QVariant MyClass::data(const QModelIndex &index, int role) const 
  .. do something for other columns
  .. for checkbox column
  if (role != Qt::CheckStateRole)  return QVariant(); 
  bool b = ... get value for checkbox column
  Qt::CheckState cs = b ? Qt::Checked : Qt::Unchecked;
  return QVariant(static_cast<int>(cs));

如果我删除Qt::ItemIsEditable,那么复选框也是只读的。后来我找到了一个SO answer,也有类似的方法。


备注:A checkbox only column in QTableView不可重复

【问题讨论】:

您能告诉我们您当前的代码吗?或者给我们一个最低限度完整的例子? @HorstWalter,删除Qt::ItemIsEditable 标志怎么样? 那么复选框是只读的,这不是我想要的。更新了以上内容。 【参考方案1】:

更换标志

Qt::ItemIsEditable

国旗

Qt::ItemIsEnabled

第一个告诉 Qt 为模型中存在的值创建一个编辑器,在您的情况下这似乎是一个文本编辑器。 如果值是bool 类型,则将显示包含truefalse 的下拉列表。

【讨论】:

以上是关于QTableView中的可编辑复选框仅列的主要内容,如果未能解决你的问题,请参考以下文章

复杂SQL查询的可编辑QTableView

QTableView 中的 Qt 复选框

QTableView 中标题单元格中的复选框

如何为每个 QTableView 单元格支持两个单独的可双击值?

QTableView/QTableWidget 中的类似 Ktorrent 的小部件

当委托失去焦点时取消 QTableView 中的编辑