QTableView 中仅可编辑的复选框列
Editable checkbox only column in QTableView
我在 QTableView
中有一个带有复选框的列。复选框由以下方式生成:
- returning
Qt::ItemIsUserCheckable
覆盖 flags
成员函数
- 在覆盖的
data()
函数中 I return a Qt::CheckState
for role == Qt::CheckStateRole
according to data
有效,见截图。
但在复选框旁边,我在列中有一些可编辑的文本框。 我怎样才能去掉这个文本框(我在其中输入了 "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。
备注:A checkbox only column in QTableView没有重复
更换标志
Qt::ItemIsEditable
带旗帜
Qt::ItemIsEnabled
第一个告诉 Qt 为模型中存在的值创建一个编辑器,在您的情况下这似乎是一个文本编辑器。
如果值是 bool
类型,则将显示包含 true
和 false
的下拉列表。
我在 QTableView
中有一个带有复选框的列。复选框由以下方式生成:
- returning
Qt::ItemIsUserCheckable
覆盖flags
成员函数 - 在覆盖的
data()
函数中 I return aQt::CheckState
forrole == Qt::CheckStateRole
according to data
有效,见截图。
但在复选框旁边,我在列中有一些可编辑的文本框。 我怎样才能去掉这个文本框(我在其中输入了 "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。
备注:A checkbox only column in QTableView没有重复
更换标志
Qt::ItemIsEditable
带旗帜
Qt::ItemIsEnabled
第一个告诉 Qt 为模型中存在的值创建一个编辑器,在您的情况下这似乎是一个文本编辑器。
如果值是 bool
类型,则将显示包含 true
和 false
的下拉列表。