Qt

Контекстное меню в Qt. Popup Menu

Представим, что на форме нужен некий объект, при нажатии правой кнопкой мыши на который вызовется его контекстное меню. Чтобы организовать работу контекстного меню в конструкторе формы напишем

[pastacode lang=»cpp» manual=»ui-%3EpushButton-%3EsetContextMenuPolicy(Qt%3A%3ACustomContextMenu)%3B%0Aconnect(ui-%3EpushButton%2C%20SIGNAL(customContextMenuRequested(const%20QPoint%26))%2C%20%0A%09%09this%2C%20SLOT(ShowContextMenu(const%20QPoint%26)))%3B» message=»» highlight=»» provider=»manual»/]

Если мы привязываем объект pushButton. Здесь можно указать интересующий лично вас объект.

Дальше создаем функцию-слот ShowContextMenu(const QPoint&):

[pastacode lang=»cpp» manual=»void%20MyClass%3A%3AShowContextMenu(const%20QPoint%26%20pos)%0A%7B%0A%2F%2F%20for%20most%20widgets%0AQPoint%20globalPos%20%3D%20ui-%3EpushButton-%3EmapToGlobal(pos)%3B%0A%2F%2F%20for%20QAbstractScrollArea%20and%20derived%20classes%20you%20would%20use%3A%0A%2F%2F%20QPoint%20globalPos%20%3D%20myWidget-%3Eviewport()-%3EmapToGlobal(pos)%3B%0AQMenu%20myMenu%3B%0AmyMenu.addAction(%22%D0%9F%D1%83%D0%BD%D0%BA%D1%82%201%22%2C%20this%2C%20SLOT(on_action_1()))%3B%0AmyMenu.addAction(%22%D0%9F%D1%83%D0%BD%D0%BA%D1%82%202%22%2C%20this%2C%20SLOT(on_action_2()))%3B%0AmyMenu.exec(globalPos)%3B%0A%7D%0Avoid%20MyClass%3A%3Aon_action_1()%0A%7B%0A%2F%2F%D1%82%D0%B5%D0%BB%D0%BE%20%D1%81%D0%BB%D0%BE%D1%82%D0%B0%20on_action_1%0A%7D%0Avoid%20MyClass%3A%3Aon_action_2()%0A%7B%0A%2F%2F%D1%82%D0%B5%D0%BB%D0%BE%20%D1%81%D0%BB%D0%BE%D1%82%D0%B0%20on_action_2%0A%7D» message=»» highlight=»» provider=»manual»/]

Функцию ShowContextMenu(const QPoint&) не забываем вставить в список слотов в h-файле. Так же, как и слоты on_action_1() и on_action_2().

Слоты on_action_1() и on_action_2() отвечают за те действия, что произойдут после выбора соответствующих пунктов контекстного меню.

У метода addAction() есть несколько возможных параметров, можно указать иконку, сочетание клавиш как shortcut и пр. Описание можно найти в документации.

Оставьте своё мнение...

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.