qt 中的多线程

原文地址(转):Qt主界面卡死的解决方案-一些具体实现方式
作者:张小飞

代码:

重写 QObject

// 头文件
class workThread : public QObject
{
    Q_OBJECT
public:
    workThread(QObject* parent = nullptr);
    ~workThread();
public slots:
    void start1();
    void doWork();
signals:
    void workFinished();
    void workStart();
};

//cpp
workThread::workThread(QObject* parent) : QObject (parent)
{
}
workThread::~workThread()
{
}
void workThread::start1()
{
    emit workStart();
    doWork();
}
void workThread::doWork()
{
    for (int i = 0; i < 1000000; i++)
    {
        qDebug()<<i<<endl;
    }
    emit workFinished();
}
  • 使用方法
QThread* m_workerThread = new QThread();
workThread* worker = new workThread();
worker->moveToThread(m_workerThread);

connect(m_workerThread, &QThread::started, worker, &workThread::start1);
connect(worker, &workThread::workFinished, m_workerThread, &QThread::quit);
connect(m_workerThread, &QThread::finished, m_workerThread, &QThread::deleteLater);