话不多说,直接上干货。
通过moveToThread创建的线程。QThread 对象居然必须要动态创建,不然释放的时候destroyed信号所自定义的槽函数不会响应。至今还没搞懂为什么。留个记录以后再探索
//worker 头文件
class worker :
public QObject
{
Q_OBJECT
public:
worker();
~worker();
void setFlag(bool Flag=true);
public slots:
//线程运行函数!!!!
void ThreadAutoRun1();
//线程函数是否开始
void StartThread();
//线程函数是否结束
void StopThread();
private:
bool isStop;
};
//worker CPP文件
worker::~worker()
{
}
void worker::ThreadAutoRun1()
{
while (FALSE==isStop)
{
qApp->processEvents();
//自动运行流程!!!!!
//QThread::msleep(1000);
}
}
void worker::StartThread()
{
}
//线程函数是否结束!
void worker::StopThread()
{
}
void worker::setFlag(bool Flag)
{
isStop=Flag;
}
//主对话框头文件
//线程对象
QThread *ThreadAuto;
//线程函数对象
worker *Mworker;
signals:
void ToThreadAuto();
//主对话框CPP文件
ThreadAuto = new QThread(this);
Mworker = new worker;
Mworker->moveToThread(ThreadAuto);
connect(this, &HalconQt3::ToThreadAuto, Mworker, &worker::ThreadAutoRun1);
bool dsada = connect(this, &HalconQt3::destroyed, this, &HalconQt3::DealClose22);//窗口销毁
if (FALSE == ThreadAuto->isRunning())//如果线程未运行。则启动线程!!!!
{
Mworker->setFlag(FALSE);
ThreadAuto->start();
emit ToThreadAuto();
}
void HalconQt3::DealClose22()
{
if (TRUE == ThreadAuto->isRunning())
{
Mworker->setFlag(TRUE);
ThreadAuto->quit();
ThreadAuto->wait();
}
}