Показывать QComboBox (через Delegate) только в определенных ячейках?
У меня уже есть QTreeView с собственной моделью и делегат, который может показывать QComboBox в одном столбце этого QTreeView.
Теперь, в зависимости от данных, отображаемых в дереве, QComboBox должен быть включен и активирован только для некоторых ячеек, а не для всего столбца. Я уже обнаружил, что QComboBox не отображается и не обрабатывается, когда функция делегата createEditor() возвращает NULL. Но: createEditor() не поставляется со ссылкой на модель, поэтому я не могу попросить его для данного индекса, если QCombobox должен быть показан или нет. С другой стороны, я не могу хранить связанную информацию в делегате (потому что это общая информация, и такое решение нарушит разделение между представлением и данными IMHO).
Итак: как я могу получить доступ к модели из createEditor() или какие другие возможности у меня есть, чтобы динамически скрывать делегированный QComboBox для некоторых ячеек моего QTreeView?
Спасибо!
1 ответ
Вы можете получить модель из QModelIndex
QWidget * createEditor(QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const
{
const QAbstractItemModel * model = index.model();
//.....
}
Таким образом, у вас есть и индекс, и модель, и я думаю, достаточно определить, создать ли поле со списком или нет.
Из вопроса не ясно, должны ли остальные ячейки редактироваться другим виджетом. Если это не так, вы можете просто сделать ячейки недоступными для редактирования, возвращая правильные флаги в вашей модели (включая Qt::ItemIsEditable
только для редактируемых ячеек.) Смотрите QAbstractItemModel::flags