1
Die Run-Methode von meinem QThread ist fertig, aber ich kann das Signal nicht bekommen. HierMein QThread fertig, aber ich kann das Signal nicht
ist der gesamte Code:
Mein Thread-Header:
#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QThread>
#include <QDebug>
#include "mydataobject.h"
class MyThread: public QThread
{
Q_OBJECT
public:
MyThread(MyDataObject data,
bool useData);
private:
void run();
signals:
void resultsReady(MyDataObject data);
private:
MyDataObject data;
bool useData;
};
#endif // MYTHREAD_H
Mein Thread-Code:
#include "mythread.h"
MyThread::MyThread(MyDataObject data, bool useData)
{
this->data = data;
this->useData = useData;
}
void MyThread::run()
{
if(useData)
{
data.calculate(); // Do something
}
emit resultsReady(data);
qDebug() << "Thread finished";
}
Mein Test-Header:
#ifndef THREADTESTER_H
#define THREADTESTER_H
#include <QDebug>
#include "mythread.h"
class ThreadTester: public QObject
{
Q_OBJECT
public:
ThreadTester();
void runTests();
public slots:
void threadFinished(MyDataObject data);
private:
MyDataObject data;
};
#endif // THREADTESTER_H
Mein Testcode :
#include "threadtester.h"
ThreadTester::ThreadTester(){}
void ThreadTester::runTests()
{
qRegisterMetaType<MyDataObject>("MyDataObject");
MyDataObject data;
MyThread* thread = new MyThread(data, true);
connect(thread, SIGNAL(resultsReady(MyDataObject)),
this, SLOT(threadFinished(MyDataObject)));
thread->start();
thread->wait();
}
void ThreadTester::threadFinished(MyDataObject data)
{
qDebug() << "TEST";
this->data = data;
}
Hauptfunktion:
#include <QApplication>
#include "threadtester.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
ThreadTester threadTester;
threadTester.runTests();
return a.exec();
}
Warum die öffentliche Schlitz threadFinished nie aufgerufen wird?
Hinweis: Die Meldung "Gewinde beendet" erscheint, aber die Meldung "TEST" nicht.
welche Version q? – Surt
Entschuldigung, ich habe vergessen, diese Information zu setzen. Qt 5.3.2 – KelvinS
Ich wette, Sie haben keine Ereignisschleife. –