2014-03-05 78 views
3

下面是GUI的快照。我只想通過單擊QMenu對象幫助來執行簡單的操作。這個QMenu對象沒有任何子菜單。 Perform action when Help menu is clicked如何僅對點擊QMenu對象執行操作?

能否請你告訴我如何只有QMenu點擊 時,這裏就是我試圖完成的動作,但我有一個空的輸出。

mainwindow.h

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 
#include <QDebug> 
#include <QSignalMapper> 

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 

private: 
    Ui::MainWindow *ui; 
    void createActions(); 
    QSignalMapper *pSignalMapper; 

private slots: 
    void help(); 

}; 

#endif // MAINWINDOW_H 

mainwindow.cpp

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    createActions(); 
} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 

void MainWindow::createActions() 
{ 
    pSignalMapper = new QSignalMapper(this); 
    connect(ui->menuHelp, SIGNAL(triggered(QAction*)), this, SLOT(help())); 

} 

void MainWindow::help() 
{ 
    qDebug()<<"inside help qdialog"; 
} 

main.cpp中

#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(); 
} 

輸出時我點擊幫助QMenu,絕對沒有:

Starting E:\Qt2\modules\guiPrototype2\build-guiPrototype2-Desktop_Qt_5_2_0_MSVC2010_32bit-Debug\debug\guiPrototype2.exe... 
+1

好吧,我想你的連接()沒有成功,請問你可以檢查連接的返回值嗎?如果它是假的,那麼連接不起作用。另外,我認爲'aboutThoShow()'更合適http://qt-project.org/doc/qt-5.0/qtwidgets/qmenu.html#aboutToShow – Najzero

回答

6

我會盡量做到以下幾點:

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

void MainWindow::help() 
{ 
    qDebug()<<"inside help qdialog"; 
} 
5

它不工作的原因,是因爲你沒有觸發任何動作。

This signal is emitted when an action in a menu belonging to this menubar is triggered as a result of a mouse click; action is the action that caused the signal to be emitted.

你應該做的是增加一個動作你QMenuBar而不是QMenu

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

triggered()SIGNAL在這個特定情況下不起作用。 –

+0

@SaiKamat因爲您正在使用'QMenu'。閱讀我的答案。它按照我測試過的方式工作。 – thuga

+0

謝謝你,thuga。我同意你的觀點,觸發()我們有QAction時的作品。在這種情況下,我很抱歉我沒有提到沒有QAction項目。如前所述,我一直在尋找一種方法來與QMenu一起工作。 :) –