2013-09-13 3 views
8

Есть ли способ в Qt добавить макет или виджеты в QMenu для создания пользовательского меню?Custom Qt QMenu

Пример внизу (слева) - это то, что у меня есть, и я хотел бы нацелиться на что-то похожее на макет справа, добавив не-меню виджеты. Если это невозможно сделать с помощью QMenu, существуют ли справочники для получения похожих результатов (возможно, с использованием более стандартного виджета как контекстного меню) где угодно?

Custom QMenu

ответ

8

Конечно, есть! В Qt, если есть a воля, есть способ.

Возможно, вам понадобится создать свой собственный класс, который использует QMenu и использует член QListWidget.

Затем вам необходимо сгенерировать макет и перегрузить все правильные функции QLayout для пересчета размера.

И тогда вы должны будете использовать этот макет (подумайте QHBoxLayout), чтобы показать как QMenu, так и QListWidget бок о бок.

Этого должно быть достаточно, чтобы указать вам в правильном направлении.

EDIT:

Как комментатор отметил, вы не можете наследовать два QObject вещи, так что я обновил ответ соответственно.

+0

@Mat Если вы хотите потратить несколько часов на написание кода для этого ответа, будьте моим гостем. Я предоставил достаточно информации для OP, чтобы начать. –

+1

Никто не просит вас написать код, вы можете удалить все эти метафайлы из своего ответа. Обратите внимание, что вопрос: «Есть ли способ в Qt добавить макет или виджеты в Qmenu для создания пользовательского меню?», А не «напишите код, который делает это для меня». Если ответ «нет», вам нужно написать это самостоятельно », то хорошо, и ваши советы выглядят хорошо. (Я понятия не имею, есть ли другие способы, но QWidgetAction можно было бы немного использовать.) – Mat

+0

@Mat Я понимаю, что вы сейчас имеете в виду. Я просто хотел сказать «да, есть способ» без написания кода. Спасибо за разъяснения. Я удалил мета-материал из своего ответа. –

0

Для настройки пунктов меню вы можете использовать класс QWidgetAction. Но вы хотите настроить меню, чтобы он выглядел как всплывающий виджет. Таким образом, вы можете подкласса QMenu и попытаться улучшить расположение меню для ваших нужд (QMenu - QWidget). Вы ничего не поняли.

Смежные вопросы