2014-02-26 22 views
0

當我點擊主窗口中的子菜單時,我想實現簡單的命令,如qDebug()。我指的是與Qt 5 IDE(...\Qt\Qt5.2.0\5.2.0\msvc2010\examples\widgets\mainwindows\menus)一起給出的示例程序,並且使用它,我設法構建了代碼。我沒有收到任何編譯時或運行時錯誤。如何在Qt中使用qAction子菜單

我使用設計模式創建了mainwindow.ui。它有一個名爲actionInterval的QAction類的對象。 snapshot of UI, which requires action when I click on Interval button

但是當我點擊它時,沒有任何反應,我無法在void interval()中實現該命令。我想我沒有正確連接。我在這裏錯過了什麼?請指教。

mainwindow.h

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 
#include <QDebug> 
namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

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


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

private slots: 
    void interval(); 
}; 

#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() 
{ 
    ui->actionInterval = new QAction(tr("&Interval"), this); 
    ui->actionInterval->setStatusTip(tr("Set the interval for capturing delta & reference images")); 
    connect(ui->actionInterval, SIGNAL(triggered()), this, SLOT(interval())); 
} 

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

的main.cpp

#include "mainwindow.h" 
#include <QApplication> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    MainWindow w; 
    w.show(); 

    return a.exec(); 
} 
+0

我懷疑你的'ui-> actionInterval'動作不在菜單中。 – vahancho

回答

1
void MainWindow::createActions() 
{ 
    ui->actionInterval->setStatusTip(tr("Set the interval for capturing delta & reference images")); 
    connect(ui->actionInterval, SIGNAL(triggered()), this, SLOT(interval())); 
} 

你不應該需要一個ui->actionInterval = new QAction(tr("&Interval"), this);路線,ui->setupUi()漢對你而言,這可能會導致錯誤的引用,所以當你點擊它時,它不會正確地觸發。

相關問題