zoukankan      html  css  js  c++  java
  • qt创建线程总结

    一、创建一个长时间运行的QT线程

    #ifndef MYPRINTJOB_H
    #define MYPRINTJOB_H
    
    #include <QObject>
    #include <QThread>
    
    #include "MyOperation/myslicefile.h"
    
    class MyPrintJob : public QObject
    {
        Q_OBJECT
    public:
        explicit MyPrintJob(QObject *parent = nullptr);
        ~MyPrintJob();
    
    public slots:
        void StartPrintWorkSlot();
    
    private:
        QThread *m_printJobThread;
    };
    
    #endif // MYPRINTJOB_H

    然后cpp文件

    #include "myprintjob.h"
    
    MyPrintJob::MyPrintJob(QObject *parent) : QObject(parent)
    {
        m_printJobThread = new QThread();
        connect(m_printJobThread, &QThread::started, this, &MyPrintJob::StartPrintWorkSlot);
    
        this->moveToThread(m_printJobThread);
        m_printJobThread->start();
    }
    
    MyPrintJob::~MyPrintJob()
    {
        if(m_printJobThread->isRunning()) {
            m_printJobThread->quit();
            m_printJobThread->wait();
        }
    }
    
    void MyPrintJob::StartPrintWorkSlot()
    {
    
    }

    二、创建一种可以停止的线程

    #ifndef THREADTEST_H
    #define THREADTEST_H
    
    #include <QObject>
    #include <QThread>
    #include <QDebug>
    #include <QTimer>
    
    
    class ThreadTest : public QObject
    {
        Q_OBJECT
    public:
        explicit ThreadTest(QObject *parent = nullptr);
        ~ThreadTest();
    
    signals:
        void workFinished();
    public slots:
        void doWork();
    private:
        QThread *thread;
    
    };
    
    #endif // THREADTEST_H

    cpp文件:

    #include "threadtest.h"
    
    ThreadTest::ThreadTest(QObject *parent) : QObject(parent)
    {
        thread = new QThread();
        connect(thread, &QThread::started, this, &ThreadTest::doWork);
        connect(this, &ThreadTest::workFinished, thread, &QThread::quit);
        connect(thread, &QThread::finished, this, &ThreadTest::deleteLater);
        connect(thread, &QThread::finished, thread, &QThread::deleteLater);
        this->moveToThread(thread);
        thread->start();
    }
    
    ThreadTest::~ThreadTest()
    {
        qDebug()<<"~ThreadTest()";
    }
    
    void ThreadTest::doWork()
    {
        qDebug()<<"doWork()";
        QTimer::singleShot(5000, this, [=](){
            emit(workFinished());
        });
    
    }
  • 相关阅读:
    若依问题解决(一)
    Java 将两个List转换为流合并List
    后端返回前端文本换行显示,只能在前端再转换
    Java Stream() 流根据对象属性去重
    vue 当前端传回后端,后端使用实体类接收数据显示报错
    js 中 getMonth() 获取的月份比现实少一个月
    vue连个数组对比
    JS链接跳转方法
    ElementUI--表格toggleRowSelection无法选中
    Linux 常用命令
  • 原文地址:https://www.cnblogs.com/ch122633/p/12100283.html
Copyright © 2011-2022 走看看