2011-12-15 2 views
3

Это сводит меня с ума ... он работал раньше, но не работает. Я определил Q_SLOTS и Q_SIGNALS, и я пытался их подключить. Он работал до некоторой степени ... и вдруг все перестало работать, и теперь я получаю ошибки. Мой код выглядит следующим образом:Сигналы QT и слоты неожиданны Ошибка

ControllerLogic.h

#ifndef CONTROLLERLOGIC_H 
#define CONTROLLERLOGIC_H 

#include "initdataaccess.h" 
#include "mainframe.h" 
#include <QtGui> 
#include "initializationdatastructure.h" 


/** This is a controller class; refering to the model-view-controller 
* architecture. 
*/ 

class ControllerLogic : public QObject 
{ 
    Q_OBJECT 
public: 
    ControllerLogic(InitDataAccess *initDataAccess, MainFrame *mainFrame); 

Q_SIGNALS: 
    void Signal(); 

private: 
    void setMainFrame(MainFrame mainFrame); 

public Q_SLOTS: 
    void receive(); 

}; 

#endif // CONTROLLERLOGIC_H 

ControllerLogic.cpp

#include "controllerlogic.h" 
#include "licensedataaccess.h" 
#include <qobjectdefs.h> 

// obsolete...may be used later 

ControllerLogic::ControllerLogic(InitDataAccess *initDataAccess, MainFrame *mainFrame) 
{ 
    connect(this, SIGNAL(signal()), mainFrame, SLOT(PrintTestSlot())); 
} 

void ControllerLogic::receive(){ 
    qDebug()<<"RECEIVE"; 
} 

void ControllerLogic::Signal(){ 
    qDebug()<<"SIGNAL"; 
} 

ОШИБКА

moc_controllerlogic.obj:-1: error: LNK2005: "protected: void __thiscall ControllerLogic::Signal(void)" ([email protected]@@IAEXXZ) already defined in controllerlogic.obj 

release\TSLSuite.exe:-1: error: LNK1169: one or more multiply defined symbols found 

Я также попытался определить сигнал следующим образом:

public: 
Q_SIGNAL void Signal(); 

, но я получаю ту же ошибку.

Что происходит? Пожалуйста, помогите!

Спасибо!

ответ

7

Проблема заключается в том, что вы пытаетесь определить функцию, называемую Signal()

Qt генерирует тело функции «сигнал» для вас, и если вы пытаетесь создать собственное определение, вы получите сообщение об ошибке что вы описываете.

(В качестве примечания, ваше заявление подключения, кажется, сломана s/signal/Signal/)

+0

нормально, ну как я могу определить, что я хочу сделать в сигнале, если кварты генерирует функции для меня? – PTBG

+0

Сигнал - это только сигнал, и ничего больше. Если вы хотите отреагировать на этот сигнал, вы подключитесь к нему с помощью соединения сигнал/слот и выполните свой собственный код в своем слоте. – Chris

+0

ohh я вижу сейчас, большое спасибо. У меня было неправильное понимание механизма сигнала/слота. – PTBG

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