QAction没有显示QMenu

时间:2016-08-07 21:25:13

标签: qt qt5 qt-designer

我正在从Qt Designer创建我的UI,它会生成以下代码:

toolBar = new QToolBar(MainWindow);
QIcon icon;
icon.addFile(QStringLiteral(":/main"), QSize(), QIcon::Normal, QIcon::Off);
MainWindow->addToolBar(Qt::TopToolBarArea, toolBar);
actionConvert = new QAction(MainWindow);
actionConvert->setObjectName(QStringLiteral("actionConvert"));
actionConvert->setIcon(icon);
toolBar->addAction(actionConvert);

现在,回到我的框架代码中:

QMenu *menuAdd = new QMenu (this);
menuAdd->addAction (tr("&Files..."));
menuAdd->addAction (tr("&Directory..."));
ui->actionConvert->setMenu (menuAdd);

当我运行应用程序时,我可以看到工具栏中的qaction甚至箭头指向下方,这表示有一个菜单,但是当我点击它时,菜单不会出现......任何想法?

2 个答案:

答案 0 :(得分:1)

您的示例代码似乎没有任何问题。

您可能没有看到菜单的原因是您需要按住按钮几秒钟才能显示菜单。单击即可执行按钮的正常操作。

请参阅:QToolButton::ToolButtonPopupMode

答案 1 :(得分:0)

您应该使用menuBar()方法添加菜单,如我的情况:

void MainWindow::ueInitMenu()
{
    this->ueSetCodeRegisterPlacesAction(new QAction(tr("Places"),
                                        this));
    this->ueCodeRegisterPlacesAction()->setShortcut(tr("Ctrl+P"));
    this->ueCodeRegisterPlacesAction()->setStatusTip(tr("Shows places code register"));

    connect(this->ueCodeRegisterPlacesAction(),
            SIGNAL(triggered()),
            this,
            SLOT(ueSlotShowPlacesView()));

    this->ueSetCodeRegisterMenu(this->menuBar()->addMenu(tr("Code register")));
    this->ueCodeRegisterMenu()->addAction(this->ueCodeRegisterPlacesAction());
}   // ueInitMenu

特别是这条线:

this-> ueSetCodeRegisterMenu(this-> menuBar() - > addMenu(tr(" Code register"))); 所以在你的情况下:

this->menuBar()->addMenu(tr("System menu");

然后添加actions。另请查看Menus Example