我的列中包含QTableView
中的复选框。该复选框由以下人员生成:
Qt::ItemIsUserCheckable
成员函数flags
data()
函数中,我根据数据为Qt::CheckState
返回role == 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 answer采用了类似的方法。
答案 0 :(得分:2)
替换旗帜
Qt::ItemIsEditable
带有标志
Qt::ItemIsEnabled
第一个告诉Qt为模型中存在的值创建一个编辑器,在你的情况下似乎是一个texteditor。
如果值为bool
类型,则会显示包含true
和false
的下拉列表。