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();
}
{
最后加上
exec();
}
#2
run
只执行一次。。函数就退出了。。
分配在栈上的对象都弹栈销毁了
所以要开启事件循环。挂在那里。同时才能发出接收事件哈。
只执行一次。。函数就退出了。。
分配在栈上的对象都弹栈销毁了
所以要开启事件循环。挂在那里。同时才能发出接收事件哈。
#3
没用的,打包上传了代码。能不能帮忙改下谢谢
#4
已经解决
原因在于在thread中用了qprocess的话引起父子线程问题,蛋碎
ping->moveToThread(this);
这样将qprocess加入到Thread线程中去就没有问题了
当然还有1楼朋友的答案
thankyou
原因在于在thread中用了qprocess的话引起父子线程问题,蛋碎
ping->moveToThread(this);
这样将qprocess加入到Thread线程中去就没有问题了
当然还有1楼朋友的答案
thankyou
#1
run()
{
最后加上
exec();
}
{
最后加上
exec();
}
#2
run
只执行一次。。函数就退出了。。
分配在栈上的对象都弹栈销毁了
所以要开启事件循环。挂在那里。同时才能发出接收事件哈。
只执行一次。。函数就退出了。。
分配在栈上的对象都弹栈销毁了
所以要开启事件循环。挂在那里。同时才能发出接收事件哈。
#3
没用的,打包上传了代码。能不能帮忙改下谢谢
#4
已经解决
原因在于在thread中用了qprocess的话引起父子线程问题,蛋碎
ping->moveToThread(this);
这样将qprocess加入到Thread线程中去就没有问题了
当然还有1楼朋友的答案
thankyou
原因在于在thread中用了qprocess的话引起父子线程问题,蛋碎
ping->moveToThread(this);
这样将qprocess加入到Thread线程中去就没有问题了
当然还有1楼朋友的答案
thankyou