我写了一个小程序,目的是在QThreadPool启动的线程上运行QRunnable的子类,以信号通知在主线程上运行的QObject的子类。信号已发送,但是以某种方式未触发插槽功能?
//main.hpp
#ifndef MAIN_HPP
#define MAIN_HPP
#include <QObject>
#include <QRunnable>
#include <QThreadPool>
#include <iostream>
class SIG : public QObject, public QRunnable
{
Q_OBJECT
signals:
void my_signal();
public:
SIG() = default;
virtual ~SIG(){};
void run()
{
std::cout << "running!" << std::endl;
emit my_signal();
};
};
class SLO: public QObject
{
Q_OBJECT
public:
SLO() = default;
virtual ~SLO(){};
public slots:
void my_slot()
{
std::cout << "signal received!" << std::endl;
};
};
#endif // MAIN_HPP
//main.cpp
#include "main.hpp"
int main(int argc, char *argv[])
{
QThreadPool *pool = QThreadPool::globalInstance();
SIG *sig = new SIG();
SLO *slo = new SLO();
QObject::connect( sig, &SIG::my_signal,
slo, &SLO::my_slot );
pool->start( sig );
}
程序输出如下:
开始 / home / work / build-exp_thread_sig_slot-Desktop_Qt_5_10_0_GCC_64bit-Debug / exp ...
运行中!
/ home / work / build-exp_thread_sig_slot-Desktop_Qt_5_10_0_GCC_64bit-Debug / exp 退出,代码为0
为什么不触发SLO :: my_slot函数?