QNetworkReply causes segfault



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

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方法时,此代码在最后一行导致segfault。如果我在API方法内部调用此方法,它将正常工作。

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

我的代码有什么问题?

我是个白痴:(

通过将manager绑定到对象变量而不是reply,解决了此问题。经理被垃圾回收了。

相关内容

  • 没有找到相关文章

最新更新