Russian Qt Forum

Qt => Вопросы новичков => Тема начата: kryksyh от Февраль 22, 2013, 10:18



Название: Различное контекстное меню для каждого элемента QTreeView
Отправлено: kryksyh от Февраль 22, 2013, 10:18
Привет.
Хочется сделать так, чтобы у разных групп элементов в QTreeView с кастомной моделью было возможным установить различные контекстные меню.

Добавить экшены к QTreeView получилось, но приходится добавлять все возможные экшены, а в них самих проверять по кому же мы щелкнули.


Название: Re: Различное контекстное меню для каждого элемента QTreeView
Отправлено: carrygun от Февраль 22, 2013, 10:37
Опишите подробнее, можно даже с картинками.

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


Название: Re: Различное контекстное меню для каждого элемента QTreeView
Отправлено: kryksyh от Февраль 22, 2013, 10:50
Вобщем, сделать возможным отображение разных меню (разных наборов экшенов) для разных элементов дерева.
Щелкаем по одному - одно меню, щелкаем по другому - другое меню.
(http://ompldr.org/taGp0dw) (http://ompldr.org/vaGp0dw/Bennu - 0.png)
(http://ompldr.org/taGp0eA) (http://ompldr.org/vaGp0eA/Bennu - 1.png)


Название: Re: Различное контекстное меню для каждого элемента QTreeView
Отправлено: carrygun от Февраль 22, 2013, 11:02
Отнаследоваться от QTreeView, создать в нем нужные меню. Далее, в mousePressEvent() смотреть на кнопку мыши и на индекс методом indexAt(). Отличать индексы по нужным параметрам (вложенность, столбец и т. д.), двигать нужное меню в нужную точку и показывать. Как один из вариантов. Может и чего еще придумать можно, но я так бы сделал.


Название: Re: Различное контекстное меню для каждого элемента QTreeView
Отправлено: twp от Февраль 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]
 


Название: Re: Различное контекстное меню для каждого элемента QTreeView
Отправлено: _OLEGator_ от Февраль 22, 2013, 11:12
Есть еще вариант с сигналом
Код
C++ (Qt)
void QWidget::customContextMenuRequested ( const QPoint & pos ) [signal]


Название: Re: Различное контекстное меню для каждого элемента QTreeView
Отправлено: kryksyh от Февраль 22, 2013, 11:14
twp, _OLEGator_, спасибо, сейчас попробую.
Жаль что нет роли для контекстного меню, было б здорово.


Название: Re: Различное контекстное меню для каждого элемента QTreeView
Отправлено: carrygun от Февраль 22, 2013, 11:34
Есть еще вариант с сигналом
Код
C++ (Qt)
void QWidget::customContextMenuRequested ( const QPoint & pos ) [signal]

Вот про это забыл.