Russian Qt Forum
Октябрь 01, 2024, 00:36
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
QTreeView QAction контекстное меню для разных типов веток
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QTreeView QAction контекстное меню для разных типов веток (Прочитано 6460 раз)
SABROG
Гость
QTreeView QAction контекстное меню для разных типов веток
«
:
Апрель 12, 2007, 22:03 »
Появилась такая необходимость, хочу сделать для каждой ветки в QTreeView свое контекстное меню. Например как сделано в QDevelop.
Его исходники я поковырял и обнаружил, что ларчик открывается через наследование QTreeView. Слазил я и в Assistant и тоже увидел, что там это реализуется через наследование, только наследуется уже другой метод.
Но вот, хоть убейте, не хочу я наследовать визуальные компоненты, главное окошко приложения рисуется в дизайнере и я не хочу потом, во время исполнения, "подрисовывать" свой TreeView на нужном месте. Как-то это не правильно, мне кажется, особенно, если я еще не определился с окончательным интерфейсом и имена виджетов и их количество могут меняться, а мне после таких изменений еще и в исходники лезть придется, чтобы их править, нет уж увольте.
Есть сигнал clicked, я бы рад его обрабатывать, вот только не знаю, как определить какая клавиша была нажата, мне нужна правая. А также я не знаю вызовется ли слот перед контекстным меню или после, а это важно, т.к. я хочу менять список QAction'ов на лету перед всплытием контекстного меню, ну а выцепить итем на котором был клик думаю не составит труда... надеюсь.
добавлено спустя 16 минут:
Кажись я все-таки нашел для себя золотую середину.
Обрабатываем clicked(), и на каждый клик определяем через currentIndex() итем, пересоздаем контекстное меню. Недостаток - меню будет пересоздаваться два раза: при выборе итема, при нажатии правой кнопкой мышки для вызова меню. Будем думать, может быть я и смогу пережить такой "хак"
добавлено спустя 31 минуту:
Так, вроде начинаю въезжать. Думается мне, что вместо contextMenuPolicy = Qt::ActionsContextMenu надо поставить Qt::CustomContextMenu, а потом ловить сигнал customContextMenuRequested и обрабатывать его в: on_myTreeView_customContextMenuRequested( const QPoint & pos )
Соответственно беру итем по currentIndex() и в зависимости от типа рисую по координатам из QPoint свою менюшку. Осталось это реализовать...
Записан
alexis
Гость
QTreeView QAction контекстное меню для разных типов веток
«
Ответ #1 :
Апрель 13, 2007, 08:49 »
клево ты сам с собой пообщался
CustomContextMenu - самое "оно", если не хочешь наследоваться.
Записан
WW
Гость
QTreeView QAction контекстное меню для разных типов веток
«
Ответ #2 :
Апрель 13, 2007, 10:42 »
Насчет дизайнера и наследования QTreeView. В примерах используют некий хак: рисуют форму, стандартное тривью, все как тебе нужно. Потом вручную в ui файле заменяют QTreeView на свой класс. форма также потом может открывается в дизайнере, допиливаться и т.д. Компилиться как обычно uic'ом.
Записан
SABROG
Гость
QTreeView QAction контекстное меню для разных типов веток
«
Ответ #3 :
Апрель 13, 2007, 21:10 »
Спасибо за совет. Я сделал через CustomContextMenu, вроде все работает.
добавлено спустя 8 часов 34 минуты:
Вот еще себе задачку нашел. Хочу сделать поддержку перетаскивания итемов в QTreeView, но так, чтобы итемы одного типа могли перетаскиваться только в пределах своего родителя и только на итемы своего типа. Как сделать такую проверку я знаю. Я пока себе смутно представляю как перехватить событие, чтобы вернуть нечто такое, чтобы позволило изменить курсор на зачеркнутый красный кружечек и запретить перетаскивание. Пока копаю в сторону dragEnterEvent и installEventFilter
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...