我在一个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答案 中。备注:不是 QTableView中仅限复选框列 的重复问题。
Qt::ItemIsEditable
标志怎么样? - Super-intelligent Shade