在Qthread中用Qprocess,出了问题,信号槽放在run()里面不执行

时间:2022-03-17 14:04:03
void Thread::run()
{

    ping=new QProcess;
    ping->start("regedit");
    output=tr("");

    connect(ping,SIGNAL(readyRead()),this,SLOT(readoutput()));//信号槽失败,不能到readoutput函数

    QString q0="信号槽结束";
    qDebug()<<q0;

}


void Thread::readoutput()
{
//    output+=ping->readAll();

//    qDebug()<<output;
    QString q0="进入Threadrun函数";
    qDebug()<<q0;

}



信号槽的槽函数不执行
请问这个是什么原因。

打包的http://www.everbox.com/f/8AYgJsUs7kg2sLDj1OmuqidK7S

4 个解决方案

#1


run()
{

   最后加上
 exec(); 
}

#2


run 
只执行一次。。函数就退出了。。
分配在栈上的对象都弹栈销毁了

所以要开启事件循环。挂在那里。同时才能发出接收事件哈。

#3


没用的,打包上传了代码。能不能帮忙改下谢谢
引用 2 楼  的回复:
run 
只执行一次。。函数就退出了。。
分配在栈上的对象都弹栈销毁了

所以要开启事件循环。挂在那里。同时才能发出接收事件哈。

#4


已经解决
原因在于在thread中用了qprocess的话引起父子线程问题,蛋碎
ping->moveToThread(this);
这样将qprocess加入到Thread线程中去就没有问题了
当然还有1楼朋友的答案
thankyou

#1


run()
{

   最后加上
 exec(); 
}

#2


run 
只执行一次。。函数就退出了。。
分配在栈上的对象都弹栈销毁了

所以要开启事件循环。挂在那里。同时才能发出接收事件哈。

#3


没用的,打包上传了代码。能不能帮忙改下谢谢
引用 2 楼  的回复:
run 
只执行一次。。函数就退出了。。
分配在栈上的对象都弹栈销毁了

所以要开启事件循环。挂在那里。同时才能发出接收事件哈。

#4


已经解决
原因在于在thread中用了qprocess的话引起父子线程问题,蛋碎
ping->moveToThread(this);
这样将qprocess加入到Thread线程中去就没有问题了
当然还有1楼朋友的答案
thankyou