5

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

  1. 返回Qt::ItemIsUserCheckable被覆盖的flags成员函数
  2. 在被覆盖的函数中,我根据数据data()返回一个Qt::CheckStateforrole == Qt::CheckStateRole

作品,见截图。

但在复选框旁边,我在列中有一些可编辑的文本框。我怎样才能摆脱这个文本框(我已经输入“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 答案。


备注:在 QTableView 中没有 A checkbox only 列的重复

4

1 回答 1

3

更换标志

Qt::ItemIsEditable

与国旗

Qt::ItemIsEnabled

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

于 2015-01-15T16:00:04.337 回答