【发布时间】: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,也有类似的方法。
【问题讨论】:
-
您能告诉我们您当前的代码吗?或者给我们一个最低限度完整的例子?
-
@HorstWalter,删除
Qt::ItemIsEditable标志怎么样? -
那么复选框是只读的,这不是我想要的。更新了以上内容。
标签: c++ qwidget qtableview qt5.3 qcheckbox