2013-05-31 4 views
3

Defined ComSendCallToScreenThread унаследовал от QThread:QThread - Нет такого слота

class ComSendCallToScreenThread : public QThread 
{ 
    private slots: 
     void readAnswer(); 
     void pauseSendingRequests(); 
}; 

void ComSendCallToScreenThread::run() 
{ 
    connect(m_senderCom, SIGNAL(readyRead()), this, SLOT(readAnswer())); 
    connect(m_senderCom, SIGNAL(readyRead()), this, SLOT(pauseSendingRequests())); 
} 

При рабочей ошибке сообщил:

Object::connect: No such slot QThread::readAnswer() in ComSendCallToScreenThread.cpp:47 
Object::connect: No such slot QThread::pauseSendingRequests() in ComSendCallToScreenThread.cpp:48 

Что послужило причиной неудачи соединять?

+1

Я заметил, что вы подклассифицировали QThread, поэтому я должен спросить, читали ли вы [это] (http://qt-project.org/forums/viewthread/20691)? Он утверждает, что QThread должен управлять потоком, а не обрабатывать данные. – thuga

+0

@thuga Ум, чтобы представить любые предложения? Очень ценю это. – CDT

+1

Ну, как показано в примерах ссылки i, правильный способ создания потока - подкласс 'QObject'. Затем вы перемещаете этот объект в поток, созданный с помощью 'new QThread'. – thuga

ответ

6

Помещенный Q_OBJECT сразу после определения класса:

class ComSendCallToScreenThread : public QThread 
{ 
    Q_OBJECT 

Qt4 documentation:

Всех классов, содержащих сигналы и слоты, должен упомянуть Q_OBJECT на своей декларации. Они также должны выводить (напрямую или косвенно) из QObject.

+0

И не забудьте вызвать 'qmake' после добавления макроса' Q_OBJECT'. – SpongeBobFan

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