Я пытаюсь ограничить выбор дерева определенным столбцом.
Я активно использую делегатов для создания настраиваемых поведений для каждого элемента в столбце, редакторов и т. д. Я надеялся, что смогу каким-то образом сделать это из делегата, заблокировав событие или что-то подобное. Проблема в том, что я думаю, мне придется создать полностью индивидуальное решение, которое имитирует расширенный выбор.
Однако, после долгих поисков и очень небольшого количества примеров, похоже, что мне нужна пользовательская модель QItemSelectionModel в моем древовидном представлении. Верно ли это предположение?
Как создать пользовательскую модель QItemSelectionModel, которая будет использовать режим расширенного выбора, но позволит мне игнорировать или отменить выбор, если он не находится в определенном столбце. Другими словами, щелчок по другому столбцу не должен изменять выбор (не следует выбирать или отменять выбор).
Я знаю, как добавить модель выбора, когда она у меня есть. Прошу помощи в реализации производного класса (если это нельзя сделать с подключенным сигналом).
Я использую Python, но буду признателен за любую помощь.
Спасибо,
[EDIT:] Я нашел эти похожие вопросы: http://lists.qt.nokia.com/pipermail/qt-interest/2010-September/027647.html
«Подкласс QItemSelectionModel и переопределение обоих методов select для получения желаемого поведения. Просто игнорируйте части диапазонов со столбцом > 0… Или, может быть, просто переопределите flags(), чтобы сделать элемент недоступным для выбора. Я не знаю, будет ли это иметь какие-либо побочные эффекты».
Я попытался переопределить флаги в своем QTreeWidgetItem, но он так и не был вызван:
def flags(self, index):
print index.column()
return super(DDOutlinerBaseItem, self).flags(index)
QAbstractItemModel::flags()
(qt-project.org/doc/qt-4.8/qabstractitemmodel .html#flags) иQt::ItemFlags
(qt -project.org/doc/qt-4.8/qt.html#ItemFlag-enum). - person leemes   schedule 06.06.2012flags
может быть прочитано по индексу, но единственный способ установить флаги, который я обнаружил, - это на уровне элемента в QTreeWidgetItem.setFlags(). Я пытался переопределить функцию, но она так и не была вызвана:def flags(self, index): print index.column() return super(DDOutlinerBaseItem, self).flags(index)
- person Rafe   schedule 06.06.2012select()
, он даже не смотрит на связанную модель данных. Попробуйте поиграть с некоторыми значениями для QAbstractItemView.selectionBehaviour (qt-project. org/doc/qt-4.8/). Возможно, это представление (а не модель выбора), которое смотрит на модель, когда пользователь хочет что-то выбрать. Если это не поможет, вам нужно дождаться ответа кого-то еще, так как я недостаточно знаю обработку выбора представлений Qt. :( - person leemes   schedule 06.06.2012column==0
для детей. См. qt-project.org/doc/qabstractitemmodel.html#details. - person leemes   schedule 07.06.2012