Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将信号从工作者类连接到控制器类-QThreads_C++_Qt_Qthread - Fatal编程技术网

C++ 将信号从工作者类连接到控制器类-QThreads

C++ 将信号从工作者类连接到控制器类-QThreads,c++,qt,qthread,C++,Qt,Qthread,标题: 这个错误是什么意思?如何解决 键入以下内容: connect(objWorker,&Worker::imageReady,this,&Controller::receiveImage) 结果: 错误:调用“Controller::connect(Worker&,void(Worker::*)(),Controller*,void(Controller::*)())时没有匹配的函数。错误在此行中: connect(objWorker,objWorker::imageReady,this,r

标题:

这个错误是什么意思?如何解决

键入以下内容:
connect(objWorker,&Worker::imageReady,this,&Controller::receiveImage)

结果:

错误:调用“Controller::connect(Worker&,void(Worker::*)(),Controller*,void(Controller::*)())时没有匹配的函数。
错误在此行中:

connect(objWorker,objWorker::imageReady,this,receiveImage)

在“新”Qt5语法中,您需要在此处提供类名而不是对象名-
objWorker::imageReady

因此,您的connect语句应该是:

 error: ‘objWorker’ is not a class, namespace, or enumeration
     connect( objWorker, objWorker::imageReady, this, receiveImage );

                     ^

<> >对于“新”QT5连接语法的更多帮助,您可以更一般地引用

,这就是我们如何在C++中编写一个指向成员函数的指针。不想让简单问题复杂化我键入了以下内容:
connect(objWorker,&Worker::imageReady,this,&Controller::receiveImage)。它导致了此错误:
错误:调用“Controller::connect(Worker&,void(Worker::*)(),Controller*,void(Controller::*)())”connect(objWorker,&Worker::imageReady,this,&Controller::receiveImage)时没有匹配的函数^
还注意到,您的
控制器
类的定义中没有
Q_对象
宏。如果没有它,信号和插槽将无法用于该类。谢谢,这是一个问题。另一个问题是,我需要编写connect(&objWorker),而不是connect(objWorker,
#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 );