Название: [QT 4.1.4] QComboBox с древовидной структурой Отправлено: itan от Июль 06, 2006, 12:08 Решил изменить содержимое всплывающего окна у QComboBox, так чтобы всместо QListView появлялся QTreeView.
Код: ui.list_box->setModel(new CMyTreeModel(this)); И все бы хорошо, если бы не одно НО - ComboBox всегда схлопывает свой список, при поступлении события MouseRelease (при выборе элемента). Получается, что когда я хочу раскрыть узел дерева список исчезает! Как быть? Можно ли изменить такое стандартное поведение? Название: [QT 4.1.4] QComboBox с древовидной структурой Отправлено: bigirbis от Июль 06, 2006, 14:41 Есть вариант отловить с QTreeView сигнал entered ( const QModelIndex & index ). Затем вызвать QTreeView::setExpanded ( const QModelIndex & index, bool expanded ). И все будет честно. И мышкой кликать не надо. Только вот с логикой работы этого механизма повозиться придется.
...но если надо... Название: [QT 4.1.4] QComboBox с древовидной структурой Отправлено: itan от Июль 06, 2006, 15:10 Да можно и вообще инициализировать так, чтобы раскрывать все вложенные списки перед началом, но только это не выход...
Название: [QT 4.1.4] QComboBox с древовидной структурой Отправлено: bigirbis от Июль 06, 2006, 15:15 Речь о том, чтобы при наведении мыши итем раскрывался, а при выходе из ветки дерева - сворачивался.
Название: [QT 4.1.4] QComboBox с древовидной структурой Отправлено: itan от Июль 06, 2006, 15:28 Все равно не вариант, я думаю нормальный пользователь не поймет такого поведения. В плане удобства хотелось бы иметь полноценный QTreeView.
Название: [QT 4.1.4] QComboBox с древовидной структурой Отправлено: bigirbis от Июль 06, 2006, 16:00 А ежели через eventFilter отловить евент нажатия кнопки мыши на QTreeView?... а потом, если он был произведен при раскрытии или закрытии элемента, то зажать?
Название: [QT 4.1.4] QComboBox с древовидной структурой Отправлено: itan от Июль 06, 2006, 16:47 попробывал так:
Код: .... правда, события MouseButtonRelease так и не дождался, наверное его кто-то уже зажал... :( Похожии проблемы у меня уже были, я о них писал тута (http://prog.org.ru/forum/topic_3240.html) Название: [QT 4.1.4] QComboBox с древовидной структурой Отправлено: itan от Июль 07, 2006, 11:41 Получилось! Оказывается, чтобы отловить события от мыши фильтр надо инсталить не для самого виджета (QTreeView), а для его так называемой области просмотра (viewport) т.е. :
Код:
Для других вещей, я так понимаю, в т.ч. и для обработки нажатия клавиш, достаточно самого виджета: Код:
Думаю, теперь дело пойдет быстрее :) |