я столкнулся со странной проблемой при попытке выполнить следующую программуслот сигнала QT не работает
main.cpp
#include "sample.h"
#include <QList>
#include <unistd.h>
int main(int argc, char **argv)
{
A a;
a.callA();
while(1)
sleep(1);
return 0;
}
sample.cpp
#include "sample.h"
#include <QList>
#include <QMetaMethod>
#include <unistd.h>
Thread::Thread(A *a)
{
}
void Thread::run()
{
int i = 5;
while (i){
qDebug()<< i;
sleep(2);
i--;
}
emit processingDone(">>> FROM THREAD");
qDebug()<<"Emited signal from thread";
}
void A::callA()
{
qDebug()<<"from callA";
//moveToThread(thread);
thread->start();
//thread->run();
//emit signalA(">>> FROM CallA");
}
void A::slotA(QString arg)
{
qDebug()<<"from sloatA "<< arg;
}
sample.h
class A;
class Thread : public QThread
{
Q_OBJECT
public:
Thread(A *a);
~Thread(){
qDebug()<<"Thread is destroyed";
}
void run();
signals:
void processingDone(QString arg);
};
class A : public QObject{
Q_OBJECT
public:
A(){
qDebug()<<"Registering";
thread = new Thread(this);
connect(thread, SIGNAL(processingDone(QString)), this, SLOT(slotA(QString)));
connect(this,SIGNAL(signalA(QString)), this, SLOT(slotA(QString)));
}
public slots:
void callA();
void slotA(QString arg);
signals:
void signalA(QString arg);
private:
Thread *thread;
};
Когда я пытаюсь выполнить программу, слот не вызывается? если я поставлю moveToThraed(), тогда код будет работать, но это не послужит моим puprose. Я что-то упускаю?
я не получил вас. – Griffin
Вы сохранили мой день – Griffin
Выполняется ли exec в главном потоке или нет? – Griffin