Russian Qt Forum
Ноябрь 24, 2024, 10:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Различное контекстное меню для каждого элемента QTreeView  (Прочитано 5209 раз)
kryksyh
Гость
« : Февраль 22, 2013, 10:18 »

Привет.
Хочется сделать так, чтобы у разных групп элементов в QTreeView с кастомной моделью было возможным установить различные контекстные меню.

Добавить экшены к QTreeView получилось, но приходится добавлять все возможные экшены, а в них самих проверять по кому же мы щелкнули.
Записан
carrygun
Гость
« Ответ #1 : Февраль 22, 2013, 10:37 »

Опишите подробнее, можно даже с картинками.

Как я сейчас понял то можно перекрыть mousePressEvent(), смотреть на индексы/другие параметры/что-то, что нужно вам/... перемещать нужное меню, в зависимости от параметров, а потом показывать. Но это как я понял. Может вы хотели что-то другое?
Записан
kryksyh
Гость
« Ответ #2 : Февраль 22, 2013, 10:50 »

Вобщем, сделать возможным отображение разных меню (разных наборов экшенов) для разных элементов дерева.
Щелкаем по одному - одно меню, щелкаем по другому - другое меню.

Записан
carrygun
Гость
« Ответ #3 : Февраль 22, 2013, 11:02 »

Отнаследоваться от QTreeView, создать в нем нужные меню. Далее, в mousePressEvent() смотреть на кнопку мыши и на индекс методом indexAt(). Отличать индексы по нужным параметрам (вложенность, столбец и т. д.), двигать нужное меню в нужную точку и показывать. Как один из вариантов. Может и чего еще придумать можно, но я так бы сделал.
Записан
twp
Гость
« Ответ #4 : Февраль 22, 2013, 11:06 »

Отнаследоваться от QTreeView, создать в нем нужные меню. Далее, в mousePressEvent() смотреть на кнопку мыши и на индекс методом indexAt(). Отличать индексы по нужным параметрам (вложенность, столбец и т. д.), двигать нужное меню в нужную точку и показывать. Как один из вариантов. Может и чего еще придумать можно, но я так бы сделал.
mousePressEvent() не корректно обрабатывать поскольку контекстное меню можно вызвать клавиатурой. Для этих целей есть
Код
C++ (Qt)
void QWidget::contextMenuEvent ( QContextMenuEvent * event ) [virtual protected]
 
Еще можно установить contextMenuPolicy в Qt::CustomContextMenu и ловить сигнал
Код
C++ (Qt)
void QWidget::customContextMenuRequested ( const QPoint & pos ) [signal]
 
Записан
_OLEGator_
Гость
« Ответ #5 : Февраль 22, 2013, 11:12 »

Есть еще вариант с сигналом
Код
C++ (Qt)
void QWidget::customContextMenuRequested ( const QPoint & pos ) [signal]
Записан
kryksyh
Гость
« Ответ #6 : Февраль 22, 2013, 11:14 »

twp, _OLEGator_, спасибо, сейчас попробую.
Жаль что нет роли для контекстного меню, было б здорово.
Записан
carrygun
Гость
« Ответ #7 : Февраль 22, 2013, 11:34 »

Есть еще вариант с сигналом
Код
C++ (Qt)
void QWidget::customContextMenuRequested ( const QPoint & pos ) [signal]

Вот про это забыл.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.118 секунд. Запросов: 21.