QNetworkReply 导致段错误

Posted

技术标签:

【中文标题】QNetworkReply 导致段错误【英文标题】:QNetworkReply causes segfault 【发布时间】:2012-09-05 19:30:19 【问题描述】:

我正在尝试为基于 PyQt4 的应用程序编写某种 API 客户端。而且,在this documentation 之后,我写了这段代码:

from PyQt4 import QtCore, QtNetwork


class API(QtCore.QObject):
    def processResponse(self, response):
        print 'response'
        response.deleteLater()

    def processError(self, error):
        print 'error'

    def authenticate(self, authUrl, login, password):
        manager = QtNetwork.QNetworkAccessManager()
        request = QtNetwork.QNetworkRequest(QtCore.QUrl(authUrl))
        reply = manager.get(request)
        reply.error.connect(self.processError)
        reply.finished.connect(self.processResponse)
        return reply

    def authenticate2(self, authUrl, login, password):
        manager = QtNetwork.QNetworkAccessManager()
        request = QtNetwork.QNetworkRequest(QtCore.QUrl(authUrl))
        self.reply = manager.get(request)
        self.reply.error.connect(self.processError)
        self.reply.finished.connect(self.processResponse)
        return self.reply


p = API()
z = p.authenticate('http://dev.dentv.ru/edda/v1/token/', 'test', 'test')
print z
print z.isFinished()

第一个问题是——没有信号(processResponseprocessError)被调用(即使我声明与self.connect(.., SIGNAL(..), ..) 的连接)。第二个问题是,当我调用isFinished 方法时,这段代码会导致最后一行出现段错误。如果我在 API 方法中调用此方法,它可以正常工作。

我在想,原因是reply 对象被垃圾收集或以某种方式删除,所以我编写了authenticate 方法的第二个版本,其中明确的reply 绑定到对象变量。它也会导致段错误。

我的代码有什么问题?

【问题讨论】:

【参考方案1】:

我是个白痴:(

问题已通过将manager 绑定到对象变量而不是reply 来解决。经理被垃圾收集(或类似的东西)。

【讨论】:

以上是关于QNetworkReply 导致段错误的主要内容,如果未能解决你的问题,请参考以下文章

连续上传导致 QNetworkReply 错误“无法分配内存”

为啥无限递归会导致段错误

NotifyHeader.code 导致段错误

提升信号量导致段错误

为啥这个非常简单的构造函数会导致段错误?

嵌套的 DirectConnection 信号导致段错误