2015-02-07 2 views
1

응용 프로그램의 기본 창에 속성 제목을 추가하려고합니다. 나는 그것을 컴파일 할 때, 컴파일러는 나에게 오류를 제공합니다신호에서 QT 정의되지 않은 참조 컴파일 오류가 발생했습니다.

mainwindow.cpp:19: undefined reference to `MainWindow::titleChanged(QString const&)' 

나는와 Mingw에 그것을 시도하고 msvc2013 모두이 오류와 같은 줄에 실패합니다. 헤더/소스 파일 :

mainwindow.h :

#ifndef MAINWINDOW 
#define MAINWINDOW 

#include <QObject> 
#include <QString> 

class MainWindow : public QObject { 
    QOBJECT_H 

    Q_PROPERTY(QString title READ getTitle WRITE setTitle NOTIFY titleChanged) 

public: 
    MainWindow(); 

    QString getTitle(); 

public slots: 
    void setTitle(const QString& title); 

signals: 
    void titleChanged(const QString& title); 

private: 
    QString title_; 
}; 

#endif // MAINWINDOW 

mainwindow.cpp :

#include "mainwindow.h" 

#include <QString> 

MainWindow::MainWindow() 
{ 
} 

QString MainWindow::getTitle() 
{ 
    return title_; 
} 

void MainWindow::setTitle(const QString& title) 
{ 
    if (title_ != title) { 
     title_ = title; 

     emit titleChanged(title); 
    } 
} 

내가 mainwindow.cpp 파일의 끝에 아래의 방법을 추가 할 경우, 다음 응용 프로그램 컴파일 및 실행되지만 신호가 방출되지 않습니다.

void MainWindow::titleChanged(const QString&) 
{ 
} 

프로젝트의 bu ild 폴더, 도움이되지 않습니다 :(. QT 5.4를 사용 중이며 QT Creator를 사용 중입니다.

+3

:

또한 읽기 가치가 신호/슬롯이있는 일반적인 문제에 대한 좋은 독서로 지적되었다? 대신에'Q_OBJECT'를 시도하십시오. – Mat

+1

나중에'qmake'를 실행하는 것을 잊지 마십시오. (QtCreator는이 작업을 자동으로 수행해야하지만 경우에 따라 ...) – Zeta

+0

QMainWindow에는 titleChanged 메서드가 없습니다. –

답변

0

이 질문은 이미 다른 사람의 의견으로 대답되었습니다. 나는 그 대답을 강조하고 싶었다.

class MainWindow : public QObject { 
    QOBJECT_H // This should be Q_OBJECT 

... 

내가 QT의 MOC 도구가 사용하는 Q_OBJECT 매크로 인클루드 가드로 QObject.h 헤더 파일에 사용되는 QOBJECT_H 매크로를 혼동 : 내 경우에는 오류가 mainwindow.h

헤더 파일에 있었다 . IntelliSense는 두 가지 옵션을 모두 제공하므로 쉽게 혼동 할 수 있습니다. `QOBJECT_H` My signal/slot connection does not work

관련 문제