首页 > 编程知识 正文

qt子线程如何传输数据给主线程(qt多线程与主线程分离)

时间:2023-05-06 17:54:28 阅读:75734 作者:4182

最近要进行脸部识别,需要语音提示功能。 这时,单线程的弊端出现了。 为此,我试着自学了以多线程为目的制作的一个并行处理。 这里只需要接收数据就可以了。

QT必须继承QThread类才能运行线程

1. mythread.h文件//mythread.h文件# ifndef my thread _ h # definem ythread _ h # includeqthread # includeiostreamusingnamesion 继承qthread类{ q _ object public 3360 explicit my thread (q object * parent=nullptr ); voidrecvnum(intnum; //数据赋值函数protected:void run (; //线程执行函数为-start )函数private:int step; //传输的数据; # endif//my thread _ H2.my thread.CPP我加入了这里

# include ' my thread.h ' # includeqdebug # includes API.h # includeiostreamusingnamespacestd; #程序注释(lib, ' sapi.lib ' )//音频头文件中的库my thread :3360 my thread (q object * parent ) :qthread(parent ) { } void my thread 3: 在while中一次也不运行while(1) { q调试} ) '当前线程对象的地址: ' q thread 3360: current thread ) ); q调试----------------- 3360---------------- -; sitch(step ) {//Speak1函数为语音接口case 1:Speak1) (“请正式向前”); 布雷克; case 2:Speak1('请张开嘴); 布雷克; case 3:Speak1('请闭上嘴); 布雷克; case 4:Speak1('请向左摇头); 布雷克; case 5:Speak1('请向右摇头); 布雷克; case 6:Speak1(“请眨眼”) break; case 7:Speak1(“您已完成所有任务”) break; 默认: break; (if ) step==-1 ) {break; }//数据赋值==接受主线程数据的void my thread :3360 recv num (intnum ) {step=num; (; 线程定义完成后开始连接

让我们用主线程的构造函数关联连接

3 .将connect添加到3. Face.cpp构造函数

face :3360 face (q构件parent ) : qmainwindow (parent ) UI.setupUI ) this ); //需要放在他之后的//初始化//线程connect(UI.pushbutton,signal(clicked ),this,slot (push button ) ) ) read _ speaad //结构线程类connect(this,Face:starting,read_Speak,MyThread:recvNum ); //数据传输相关函数,(与表单、主类相对应的函数、线程类名、线程相对应的函数) starting映射recvNum函数connect(UI.pushbutton、qpushbutton 333333333333333 //用于启动线程的间接启动start ()是run ) (read_Speak-start ) ); ); }4. face.hclassface : publicqmainwindow { q _ object public : face (q构件* parent=q _ null ptr ); 私密slots : void push button (; 隐私: my thread * read _ speak; //线程类将mythread的传输函数与用于传输//数据的函数相关联,该函数可以在其他位置定义信号3360语音启动(intnum ) }; 5 .如何传输数据? 可以通过直接调用starting函数的主线程将数据传输到子线程!

starting(3;

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。