可编辑的复选框列在QTableView中

5

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

  1. 在重写的flags成员函数中返回Qt :: ItemIsUserCheckable
  2. 在重写的data()函数中,根据数据为role == Qt :: CheckStateRole返回Qt :: CheckState

效果如图所示。

但是除了复选框之外,该列还有一些可编辑的文本框。 如何摆脱这个文本框(我已经输入“dsdsdsds”进行演示)?澄清一下,复选框应该是可编辑的,但其他内容不应该可编辑。

Readmode Editmode


按要求,我只能展示简化版本。

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答案 中。
备注:不是 QTableView中仅限复选框列 的重复问题。

你能展示一下你现在的代码吗?或者给我们提供一个最小完整的例子吗? - randomusername
1
@HorstWalter,移除Qt::ItemIsEditable标志怎么样? - Super-intelligent Shade
然后复选框是只读的,这不是我想要的。已更新上述内容。 - Horst Walter
1个回答

2

将标志替换为

Qt::ItemIsEnabled

第一个标志告诉Qt在模型中创建一个编辑器,这在你的情况下似乎是一个文本编辑器。 如果该值属于bool类型,则会显示包含truefalse的下拉列表。


设置 Qt::ItemIsEnabled 只会禁用该列。移除 Qt::ItemIsEditable 将设置字段为只读。 - user2019716

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接