Как назначить сигнал QMenu вместо QAction в Qt? - PullRequest
4 голосов
/ 16 июня 2011

Хотелось бы иметь пункт меню без детей.У меня есть QMenubar, и в этом меню есть QMenu.Чтобы использовать его как меню, я должен поместить в него QActions, и они появятся, если я нажму на QMenu.Как это возможно, иметь только меню, без каких-либо QActions, чтобы выполнить действие, как если бы это было QAction?

Обходной путь должен был бы иметь набор инструментов и замаскировать его как меню, но этовозникает несколько проблем:

  • Это не самое чистое решение
  • Мне нужно вручную позаботиться о выделении его при наведении курсора мыши, и оно не будет зависеть от настройки платформы и пользователя.
  • Я не могу использовать его вместе в меню с обычным меню для детей.

1 Ответ

4 голосов
/ 16 июня 2011

Итак, вам нужна строка меню, которая запускает действия, не открывая подменю?

Попробуйте напрямую добавить QActions в меню, вместо QMenu между:

#include <QtWidgets>

int main(int argc, char **argv)
{
    QApplication app(argc, argv);
    QMainWindow *wnd = new QMainWindow;
    QMenuBar *m = new QMenuBar;
    QAction *a = new QAction("DoIt");

    QObject::connect(a, &QAction::triggered, [wnd](){
        QMessageBox::information(wnd, "DoIt", "DoIt");
    });

    m->addAction(a);
    wnd->setMenuBar(m);
    wnd->show();
    return app.exec();
}

Альтернативновы можете создать подкласс QMenu и обработать метод mousePressEvent для генерации сигнала

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...