LINUX.ORG.RU

QListWidgetItem сделать контекстное меню

 , ,


0

1

Здравствуйте.

Есть QListWidget, в нём динамически добавляются различные QListWidgetItem. Так вот, как добавить поддержку контекстного меню для каждого QListWidgetItem? Меню для всех QListWidgetItem одинаковые. Спасибо.

Я бы повесил на весь QListWidget (через addAction-ы и setContextMenuPolicy(Qt::ActionsContextMenu) ) и далее смотрел при необходимости, какие узлы выделены. Не то, что нужно?

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Ну я то повесил на весь qlistwidget, но тогда контекстное меню вызывается в любом месте qlistwidget. Но требуется только при клике на qlistwidgetitem , а ещё и ссылку на него надо как-то получить, чтобы через контекстное меню работать с ним.

zamazan4ik ★★
() автор топика
void gui::on_list_customContextMenuRequested(const QPoint &pos)
{
	QTreeWidgetItem *item = ui->widget_list->itemAt(pos);
	if(item == NULL) return;
	int id = item->data(0, Qt::UserRole).toInt();
...
// QMenu menu1, menu2;
	if(id) menu1.exec(ui->widget_list->mapToGlobal((pos)));
	else menu2.exec(ui->widget_list->mapToGlobal((pos)));
I-Love-Microsoft ★★★★★
()

вообще в Qt есть такой метод QWidget::contextMenuEvent, чтоб его вызывали, надо установить ContextMenuPolicy widgetа в Qt::DefaultContextMenu.

Но!

Я столкнулся с тем, что если просто в лоб показывать меню в этом методе, выделение в QTreeView (возможно не только в нем!) рвётся. То есть та клетка куда ткнули выделена, но в дереве есть еще треугольнички для разворачивания веток и у них фокус не переключается. Не помню как побеждал это дерьмо, но оно точно решается.

ckotinko ☆☆☆
()
Ответ на: комментарий от ckotinko

Проблема в том, что нельзя взять и установить свойство это в QListWidgetItem - он не отнаследован от QWidget и нет там Q_OBJECT. Поэтому никакие connect с ним не работают. Зато вот QListWidget всё это имеет.

zamazan4ik ★★
() автор топика
Ответ на: комментарий от zamazan4ik

Ну может это по недосмотру, скорее там надо QListWidgetItem, видимо классы совместимые и я не заметил ошибку

Но в целом это работает как ты хочешь - где нет элемента то будет NULL и ничего не появится, где есть элемент - то в зависимости от его типа - можешь разные менюшки выплывать

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от zamazan4ik

ну ёпт. в виджете, который показывает отнаследуйся и там проверяй что в selection лежит.

ckotinko ☆☆☆
()
Ответ на: комментарий от I-Love-Microsoft

Да, проверил - работает именно так, как нужно. Решено. Спасибо всем.

zamazan4ik ★★
() автор топика
Последнее исправление: zamazan4ik (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.