Редактируемый флажок только для столбца в QTableView

У меня есть столбец с флажком в QTableView, Флажок генерируется:

  1. возврате Qt::ItemIsUserCheckable переопределено flags функция-член
  2. переопределено data() функция, которую я возвращаю Qt::CheckState за role == Qt::CheckStateRole по данным

Работает, смотрите скриншот.

Но кроме флажка у меня есть некоторые редактируемые текстовые поля в столбце. Как я могу избавиться от этого текстового поля (где я ввел «dsdsdsds» для демонстрации? Разъяснение, флажок должен быть редактируемым, но больше ничего

Readmode
Режим редактирования


По запросу могу показать только упрощенную версию

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 тогда флажок только для чтения. Позже я нашел Так ответь с похожим подходом.


Замечание: нет дубликатов Столбец только для флажков в QTableView

3

Решение

Заменить флаг

Qt::ItemIsEditable

с флагом

Qt::ItemIsEnabled

Первый говорит Qt создать редактор для значения, присутствующего в модели, который, похоже, является текстовым редактором в вашем случае.
Если значение имеет тип bool затем выпадающий список, содержащий true а также false будет показано вместо

2

Другие решения


По вопросам рекламы [email protected]