2014-02-26 4 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() 한 그게 당신을 위해 dles, 그래서 잠재적으로 잘못된 참조를 일으킬 그래서 그것을 클릭하면 제대로 발사하지 않습니다.