2015-02-07 2 views
1

Я пытаюсь добавить название собственности в основное окно приложения. Но когда я пытаюсь скомпилировать, компилятор дает мне эту ошибку:QT undefined ошибка компиляции ссылки на сигнал

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&) 
{ 
} 

Я попытался очистить бухту проекта ild, это не помогает :(. Я использую QT 5.4 и работаю над QT Creator.

+3

'QOBJECT_H'? Вместо этого попробуйте 'Q_OBJECT'. – Mat

+1

Не забудьте запустить 'qmake' впоследствии. (QtCreator должен делать это автоматически, но на всякий случай ...) – Zeta

+0

QMainWindow не имеет метода titleChanged. –

ответ

0

Этот вопрос уже ответил в комментарии кем-то еще. Я просто хотел подчеркнуть ответ. Ошибка в моем случае был в заголовочном файле

mainwindow.h:

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

... 

Я перепутал макрос QOBJECT_H используется в файле заголовка QObject.h как включить охранник с Q_OBJECT макрос используется MOC инструмент в Qt , Поскольку intellisense предложит вам оба варианта, их легко спутать.

Я также получил указал на хорошее чтение об общих проблемах с сигналами/слотами стоят для чтения: My signal/slot connection does not work

Смежные вопросы