2015-01-04 3 views
2

У меня есть столбец с флажком в QTableView. Флажок порождена:Редактируемый флажок только в столбце QTableView

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

Works, см скриншот.

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

Readmode Editmode


As запрошено, я могу показать только упрощенную версию

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

+0

Вы можете показать нам свой текущий код? или дать нам минимально полный пример? – randomusername

+0

добавлен код выше –

+1

@HorstWalter, как насчет удаления флага 'Qt :: ItemIsEditable'? –

ответ

2

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

Qt::ItemIsEditable

с флагом

Qt::ItemIsEnabled

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

 Смежные вопросы

  • Нет связанных вопросов^_^