QNetworkAccessManager的finished信号无法触发槽函数

dujiakehu 2015-07-20 01:43:53
web_view = new QWebView();
postManager = new QNetworkAccessManager();
getManager = new QNetworkAccessManager();

connect(this,SIGNAL(sss(QNetworkReply*)),this,SLOT(downloadFinished(QNetworkReply*))); //测试
connect(web_view,SIGNAL(urlChanged(QUrl)),this,SLOT(on_webView_urlChanged(QUrl))); //浏览器跳转事件
connect(postManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(uploadFinished(QNetworkReply*))); //文件上传完成
connect(getManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(downloadFinished(QNetworkReply*))); //文件下载完成

如上,这是构造函数里的代码,四个连接都返回true,其中测试和跳转事件都能触发,剩下的两个无法触发,请问是为什么呢?
...全文
1725 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dujiakehu 2015-07-22
  • 打赏
  • 举报
回复
引用 6 楼 u011417605 的回复:
Class class1; 这种方式是放在栈上的,调用class.method();的话,应该是已经请求了,但是返回是需要时间的; 有时候可以收到有时候不能收到,应该和你网络速度有关系;局部变量class1调用完毕就会释放,如果已经释放了,还没有收到回复,估计就不会触发信号了。如果请求很顺利,很快得到回复,还没有释放class1,那么可能会触发信号。 new 是放在堆上的,你不手动删除的话,只有到程序退出才会释放。 这是我的理解,仅供参考。。
有道理,多谢
GreenArrowMan 2015-07-21
  • 打赏
  • 举报
回复
Class class1; 这种方式是放在栈上的,调用class.method();的话,应该是已经请求了,但是返回是需要时间的; 有时候可以收到有时候不能收到,应该和你网络速度有关系;局部变量class1调用完毕就会释放,如果已经释放了,还没有收到回复,估计就不会触发信号了。如果请求很顺利,很快得到回复,还没有释放class1,那么可能会触发信号。 new 是放在堆上的,你不手动删除的话,只有到程序退出才会释放。 这是我的理解,仅供参考。。
dujiakehu 2015-07-20
  • 打赏
  • 举报
回复
引用 3 楼 u011417605 的回复:
解决了就好,慢慢的会发现问题出在哪里的
我写了解决的方法,你知道那是为什么吗?
dujiakehu 2015-07-20
  • 打赏
  • 举报
回复
问题解决了,但不是很明白 我的类是Class,manager->get(request)是在Class的一个方法method()里执行的,如果我直接 Class class1; class.method(); 这样就会出现我问题中的情况 如果我用指针,即 Class *class2 = new Class(); class->method(); getFinished(QNetworkReply*)就会被触发 这是为什么呢?第一种方法里为什么又会出现有的能触发,有的又不能触发的情况呢??
GreenArrowMan 2015-07-20
  • 打赏
  • 举报
回复
解决了就好,慢慢的会发现问题出在哪里的
dujiakehu 2015-07-20
  • 打赏
  • 举报
回复
引用 1 楼 u011417605 的回复:
QNetworkAccessManager *manager = new QNetworkAccessManager(this); connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); manager->get(QNetworkRequest(QUrl("http://qt.nokia.com")));//这句有吗
有,问题解决了,不过原因不是很明白
GreenArrowMan 2015-07-20
  • 打赏
  • 举报
回复 1
QNetworkAccessManager *manager = new QNetworkAccessManager(this); connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); manager->get(QNetworkRequest(QUrl("http://qt.nokia.com")));//这句有吗

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧