找回密码
 立即注册
收起左侧

线程中用什么代替信号与槽的关系

3
回复
8106
查看
[复制链接]
累计签到:67 天
连续签到:1 天
来源: 2014-12-9 19:06:21 显示全部楼层 |阅读模式
1Qter豆
线程中,在run函数中,每2秒触发函数 fVisitXml();
void UseThread::run()
{
while(1){
fVisitXml();

sleep(2);
}
为了触发槽SLOT(replyFinished(QNetworkReply*),必须加上exec(),否则触发不了SLOT(replyFinished(QNetworkReply*)),可加上exec(),它会一直执行,run每2秒触发不进来fVisitXml(),该怎么办 ?
void UseThread::fVisitXml()
{

    manager = new QNetworkAccessManager();
       request = new QNetworkRequest();
        request->setUrl(QUrl("http://weather.com.cn/data/sk/101070201.html"));
        reply = manager->get(*request);
connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));
exec();
}



最佳答案

查看完整内容

看你这个代码就觉得很有问题 每次进来 你都要new 之前new的对象??? 还有就是你说的connect这个,你可以加上第五个参数,忘了是什么名字,反正就那么几个枚举,加上后就是一发送信号,就立即执行槽
回复

使用道具 举报

累计签到:410 天
连续签到:1 天
2014-12-9 19:06:22 显示全部楼层
看你这个代码就觉得很有问题

每次进来 你都要new   之前new的对象???
还有就是你说的connect这个,你可以加上第五个参数,忘了是什么名字,反正就那么几个枚举,加上后就是一发送信号,就立即执行槽
回复

使用道具 举报

累计签到:67 天
连续签到:1 天
2014-12-9 21:22:50 显示全部楼层
a408815041 发表于 2014-12-9 19:18
看你这个代码就觉得很有问题

每次进来 你都要new   之前new的对象???

恩   我把那两个new对象放到run函数里咯  while(1)上面

connect的改为 connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)),Qt:irectConnection));
结果是replyFinished(QNetworkReply*)一直没被触发,Qt:irectConnection是直连方式,信号发出,槽立即调用
回复

使用道具 举报

累计签到:67 天
连续签到:1 天
2014-12-9 21:33:36 显示全部楼层
a408815041 发表于 2014-12-9 19:18
看你这个代码就觉得很有问题

每次进来 你都要new   之前new的对象???

测试的结果是,加上第5个参数,槽还是不被触发,还是加上exec()这一条才被触发,查了一下exec()函数,是消息内部循环,没这句是不是就不会发射finish信号咯 好晕啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了