Qt 如何仅在单击QMenu对象时执行操作?

Qt 如何仅在单击QMenu对象时执行操作?,qt,signals-slots,qmenu,qaction,Qt,Signals Slots,Qmenu,Qaction,这里是GUI的快照。我只想通过单击QMenu对象帮助来执行简单的操作。此QMenu对象没有任何子菜单 您能告诉我在仅单击QMenu时如何执行操作吗 这是我尝试过的,但是我得到了一个空输出 主窗口 我会尽量做到以下几点: void MainWindow::createActions() { [..] connect(ui->menuHelp, SIGNAL(aboutToShow()), this, SLOT(help())); } void MainWindow::hel

这里是GUI的快照。我只想通过单击
QMenu
对象帮助来执行简单的操作。此
QMenu
对象没有任何子菜单

您能告诉我在仅单击
QMenu
时如何执行操作吗 这是我尝试过的,但是我得到了一个空输出

主窗口


我会尽量做到以下几点:

void MainWindow::createActions()
{
    [..]
    connect(ui->menuHelp, SIGNAL(aboutToShow()), this, SLOT(help()));
}

void MainWindow::help()
{
    qDebug()<<"inside help qdialog";
}
void主窗口::createActions()
{
[..]
连接(ui->菜单帮助,信号(aboutToShow()),此,插槽(help());
}
void主窗口::help()
{

qDebug()之所以不起作用,是因为您没有触发任何操作

您应该做的是将操作添加到
QMenuBar
而不是
QMenu

QAction *helpAction = ui->menuBar->addAction("Help");
connect(helpAction, SIGNAL(triggered()), this, SLOT(help()));

嗯,我猜你的connect()没有成功,你能检查一下connect的返回值吗?如果它是false,那么connect就不起作用了。另外,我认为'about how()'更合适信号在这种特殊情况下不起作用。@SaiKamat,因为您使用的是
QMenu
。请阅读我的答案。它的工作原理与我测试的一样。谢谢你,thuga。我同意你的看法,触发()当我们有QAction时可以工作。在这种情况下,我很抱歉没有提到QAction项。我正在寻找一种只使用QMenu的方法,如上所述。:@SaiKamat我知道。我试图指出,你应该使用
QAction
而不是
QMenu
。像
QAction一样使用
QMenu
对象e> 对象是一种丑陋的黑客方式。
QMenu
是一个菜单小部件,它应该这样做。提供一个菜单。这比公认的答案更简洁。使用QMenu::aboutToShow()信号,在我点击菜单控件后,菜单栏仍然处于选中状态,这有点破坏了用户体验。这种方法工作更顺畅。在这里有一个错误,当在这个菜单上移动鼠标时,没有点击,插槽自动触发。
#include "mainwindow.h"
#include <QApplication>
#include <ui_mainwindow.h>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}
Starting E:\Qt2\modules\guiPrototype2\build-guiPrototype2-Desktop_Qt_5_2_0_MSVC2010_32bit-Debug\debug\guiPrototype2.exe...
void MainWindow::createActions()
{
    [..]
    connect(ui->menuHelp, SIGNAL(aboutToShow()), this, SLOT(help()));
}

void MainWindow::help()
{
    qDebug()<<"inside help qdialog";
}
QAction *helpAction = ui->menuBar->addAction("Help");
connect(helpAction, SIGNAL(triggered()), this, SLOT(help()));