qt: я хотел бы отключить привязки клавиш, автоматически устанавливаемые для QTreeView

Я использую PyQt4 и QTreeView (хотя это можно так же легко применить и к qt напрямую).

Прямо сейчас есть привязки клавиш по умолчанию, которые управляют развертыванием/свертыванием ветвей с помощью стрелок вправо и влево. К сожалению, эти привязки не идеальны, и я хотел бы их отключить. Я не смог понять, как это сделать. Кто-нибудь знает, как отключить (или переназначить) привязки клавиш по умолчанию в QTreeView?


person bvz    schedule 09.11.2010    source источник
comment
Что это за ключи? Стрелки или...?   -  person Andy M    schedule 09.11.2010
comment
Да, стрелки проблематичны, потому что я хочу с ними перемещаться, но вместо этого они продолжают расширять или сворачивать строки (совершенно неожиданно).   -  person bvz    schedule 09.11.2010


Ответы (1)


У вас есть два возможных варианта: 1) Повторно реализовать keyPressEvent в QTreeView. и проверьте, является ли нажатая клавиша Qt::Key_Up или Qt::Key_Down.

2) Вы можете установить eventFilter и проверить, является ли событие QEvent::KeyPress и что ключ соответствует либо Qt::Key_Up или Qt::Key_Down.

Я не знаю PyQt, поэтому не могу дать вам код на Python, но надеюсь, что выразился достаточно ясно.

person Live    schedule 09.11.2010
comment
Это кажется довольно ясным, спасибо. Итак, как только я повторно реализую keyPressEvent (то, что я все равно планирую сделать, потому что я хочу изменить какое-то другое поведение), мне придется вручную перемещать выделение, верно? - person bvz; 09.11.2010
comment
Извините за беспокойство, но не могли бы вы указать мне правильный способ вручную переместить выделение? Я нахожусь в keyPressEvent QTreeView и успешно перехватываю нажатие клавиши со стрелкой влево. Я успешно создал новый QModelIndex, который ссылается на правильную ячейку, но я не могу понять, как заставить QTreeView фактически использовать этот QModelIndex для выбора соответствующей ячейки. - person bvz; 10.11.2010
comment
Конечно, как только я задаю вопрос, мне удается его понять: используйте selectionModel из QTreeView. Поэтому я использую следующие строки: newModelIndex = self.model().index(row, col, parent) self.selectionModel().setCurrentIndex(newModelIndex, QtGui.QItemSelectionModel.SelectCurrent) - person bvz; 10.11.2010