文章目录
一、项目需求
- 一、项目需求
- 二、QThread
- 2.1 头文件
- 2.2 常用函数
- 二、子进程
- 2.1 `mythread.h`
- 2.2 `mythead.c`
- 三、父进程
主线程进行用户的交互,用户可以指定一个排序数组的大小,然后系统随机生成一个这么大的序列,然后子进程进行排序并且将这个序列返回给主线程,主线程读取后将数字序列填充在排序后的位置
二、QThreadQT自己封装了一个QThread
的类,我们直接继承它并且实现其中的部分函数就可以
#include
我们需要将这个进程要做的事情放在
run()
函数中,当然也可以放一些自己的函数然后实现
mythread.h
这里我们需要将我们的子进程类定义,首先是继承QThread
然后定义一些自己需要用到的函数
#ifndef MYTHREAD_H
#define MYTHREAD_H
#include
#include
#include
//生成随机数
class MyThread : public QThread
{
Q_OBJECT
public:
explicit MyThread(QObject *parent = nullptr);
void recvNum(int num);
protected:
void run() override;
signals:
void sendArray(QVector array);
private:
int m_num;
};
#endif // MYTHREAD_H
2.2 mythead.c
这里负责实现这个子进程类的一些函数:
#include "mythread.h"
#include
#include
#include
MyThread::MyThread(QObject *parent) : QThread(parent)
{
}
void MyThread::recvNum(int num){
m_num = num;
qDebug("num = %d\n",num);
}
void MyThread::run(){
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
qDebug()randlist->clear();
//想办法传入 num的 循环次数
int num = ui->spinBox->value();
emit starting(num);
fristThread->start();
});
//接收子线程函数处理过后发过来的数据
connect(fristThread,&MyThread::sendArray,this,[=](QVector list){
int n = list.size();
for(int i=0;irandlist->addItem(QString::number(list.at(i)));
}
std::sort(list.begin(),list.end());
for(int i = 0;i tobetter->addItem(QString::number(list.at(i)));
}
});
}
MainWindow::~MainWindow()
{
delete ui;
}