Hor*_*ter 5 c++ qwidget qtableview qcheckbox qt5.3
我有一个带有复选框的列QTableView。该复选框由以下生成:
Qt::ItemIsUserCheckable覆盖的flags成员函数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));
}
Run Code Online (Sandbox Code Playgroud)
如果我删除,Qt::ItemIsEditable则该复选框也是只读的。我后来用类似的方法找到了一个SO 答案。
更换标志
Qt::ItemIsEditable
与旗帜
Qt::ItemIsEnabled
第一个告诉 Qt 为模型中存在的值创建一个编辑器,在您的例子中这似乎是一个文本编辑器。如果该值是类型,则将显示包含和bool的下拉列表。truefalse
| 归档时间: |
|
| 查看次数: |
5837 次 |
| 最近记录: |