基本上,我在QStackedWidget中有4个小部件,它们是:
在ProcessWidget和LoadingWidget中,我将使用QNetworkAccessManager与我的API通信。
我的申请流程:
从HomeWidget开始。
然后,切换到ProcessWidget。
然后,切换到ConfirmWidget。
然后,切换到LoadingWidget。
然后,切换回HomeWidget,依此类推。
在ProcessWidget中,我只发出1个请求。但是在LoadingWidget中,我有4个请求。
这是我为每个请求进行通信的方式(每个请求的区别仅在于URL):
def doRequest(self):
url = "http://127.0.0.1:8000/api"
req = QtNetwork.QNetworkRequest(QUrl(url))
self.networkAccessManager = QtNetwork.QNetworkAccessManager()
self.networkAccessManager.finished.connect(self.handleResponse)
self.networkAccessManager.get(req)
def handleResponse(self, reply):
er = reply.error()
if er == QtNetwork.QNetworkReply.NoError:
bytes_string = reply.readAll()
data = json.loads(str(bytes_string, 'utf-8'))
# Do something
else:
errorMessage = "Error occured: "+ str(er) + "\n"+ str(reply.errorString())
# Do something
问题是,在我的应用程序流程的第4次迭代中,我的应用程序突然崩溃了。出现此错误:
Process Finished With Exit Code 139 (Interrupted by signal 11: SIGSEGV)
怎么了?
答案 0 :(得分:0)
最后,我可以通过重新定义请求的方式来解决问题。
这是代码:
# Instantiate the NetworkAccessManager as the Widget's property
self.networkAccessManager = QtNetwork.QNetworkAccessManager()
def doRequest(self):
url = "http://127.0.0.1:8000/api"
req = QtNetwork.QNetworkRequest(QUrl(url))
reply = self.networkAccessManager.get(req)
reply.finished.connect(self.handleResponse)
def handleResponse(self):
reply = self.sender()
er = reply.error()
if er == QtNetwork.QNetworkReply.NoError:
bytes_string = reply.readAll()
data = json.loads(str(bytes_string, 'utf-8'))
# Do something
else:
errorMessage = "Error occured: "+ str(er) + "\n"+ str(reply.errorString())
# Do something
reply.deleteLater()
我可以得出结论,问题来自答复对象。