将信号从工人 class 连接到控制器 class - QThreads
Connect signals from worker class to controller class - QThreads
Header:
#ifndef CONTROLLER_THREAD
#define CONTROLLER_THREAD
#include <QThread>
class Worker : public QObject
{
Q_OBJECT
public:
Worker();
~Worker();
private slots:
void calculateImage();
signals:
void imageReady();
};
class Controller: public QObject
{
public:
Worker objWorker;
QThread objQThread;
Controller();
~Controller();
public slots:
void receiveImage();
};
#endif // CONTROLLER_THREAD
来源:
#include <controller_thread.h>
Worker::Worker(){}
Worker::~Worker(){}
void Worker::calculateImage()
{
}
Controller::Controller()
{
objWorker.moveToThread( &objQThread );
connect( objWorker, objWorker::imageReady, this, receiveImage );
objQThread.start();
}
Controller::~Controller(){}
void Controller::receiveImage()
{
}
我收到错误消息:
error: ‘objWorker’ is not a class, namespace, or enumeration
connect( objWorker, objWorker::imageReady, this, receiveImage );
^
这个错误是什么意思?如何解决?
正在输入:
connect( objWorker, &Worker::imageReady, this, &Controller::receiveImage );
结果:
error: no matching function for call to ‘Controller::connect(Worker&, void (Worker::*)(), Controller*, void (Controller::*)())
错误在这一行:
connect( objWorker, objWorker::imageReady, this, receiveImage );
在 'new' Qt5 语法中,您需要在此处提供 class 名称而不是对象名称 - objWorker::imageReady
.
所以,你的连接语句应该是这样的:
connect( objWorker, &Worker::imageReady, this, &Controller::receiveImage );
有关 'new' Qt5 连接语法的更多帮助,您可以参考 here
Header:
#ifndef CONTROLLER_THREAD
#define CONTROLLER_THREAD
#include <QThread>
class Worker : public QObject
{
Q_OBJECT
public:
Worker();
~Worker();
private slots:
void calculateImage();
signals:
void imageReady();
};
class Controller: public QObject
{
public:
Worker objWorker;
QThread objQThread;
Controller();
~Controller();
public slots:
void receiveImage();
};
#endif // CONTROLLER_THREAD
来源:
#include <controller_thread.h>
Worker::Worker(){}
Worker::~Worker(){}
void Worker::calculateImage()
{
}
Controller::Controller()
{
objWorker.moveToThread( &objQThread );
connect( objWorker, objWorker::imageReady, this, receiveImage );
objQThread.start();
}
Controller::~Controller(){}
void Controller::receiveImage()
{
}
我收到错误消息:
error: ‘objWorker’ is not a class, namespace, or enumeration
connect( objWorker, objWorker::imageReady, this, receiveImage );
^
这个错误是什么意思?如何解决?
正在输入:
connect( objWorker, &Worker::imageReady, this, &Controller::receiveImage );
结果:
error: no matching function for call to ‘Controller::connect(Worker&, void (Worker::*)(), Controller*, void (Controller::*)())
错误在这一行:
connect( objWorker, objWorker::imageReady, this, receiveImage );
在 'new' Qt5 语法中,您需要在此处提供 class 名称而不是对象名称 - objWorker::imageReady
.
所以,你的连接语句应该是这样的:
connect( objWorker, &Worker::imageReady, this, &Controller::receiveImage );
有关 'new' Qt5 连接语法的更多帮助,您可以参考 here