gpt4 book ai didi

qt - 当您在 QtNetwork 中执行多个请求时,您如何识别发出 QNetworkReply 完成信号以响应的请求?

转载 作者:可可西里 更新时间:2023-11-01 15:27:05 27 4
gpt4 key购买 nike

我有一个项目会加载一个 HTTP 页面,解析它,然后根据从第一个页面收到的数据打开其他页面。

由于 Qt 的 QNetworkAccessManager 异步工作,看来我应该能够通过继续发出 HTTP 请求一次加载多个页面,然后按照回复的顺序处理响应,并且会是由偶数循环处理。

虽然我在弄清楚如何做到这一点时遇到了一些问题:

首先,我在 stackoverflow 的某处读到您应该只使用一个 QNetworkAccess 管理器。我不知道这是不是真的。

问题是我正在连接到单个 QNetworkAccess 管理器上的已完成插槽。如果我一次做多个请求,我不知道完成的信号是在响应什么请求。我不知道是否有一种方法可以检查从信号传递的 QNetworkReply 对象以了解它响应的是什么回复?或者我实际上应该为每个请求使用不同的 QNetworkAccessManager 吗?

这是我现在如何将内容链接在一起的示例。但是我知道当我同时执行多个请求时这将不起作用:

from PyQt4 import QtCore,QtGui,QtNetwork

class Example(QtCore.QObject):
def __init__(self):
super().__init__()
self.QNetworkAccessManager_1 = QtNetwork.QNetworkAccessManager()
self.QNetworkCookieJar_1 = QtNetwork.QNetworkCookieJar()
self.QNetworkAccessManager_1.setCookieJar(self.QNetworkCookieJar_1)
self.app = QtGui.QApplication([])
def start_request(self):
QUrl_1 = QtCore.QUrl('https://erikbandersen.com/')
QNetworkRequest_1 = QtNetwork.QNetworkRequest(QUrl_1)
#
self.QNetworkAccessManager_1.finished.connect(self.someurl_finshed)
self.QNetworkAccessManager_1.get(QNetworkRequest_1)
def someurl_finshed(self, NetworkReply):
# I do this so that this function won't get called for a diffent request
# But it will only work if I'm doing one request at a time
self.QNetworkAccessManager_1.finished.disconnect(self.someurl_finshed)
page = bytes(NetworkReply.readAll())
# Do something with it
print(page)
QUrl_1 = QtCore.QUrl('https://erikbandersen.com/ipv6/')
QNetworkRequest_1 = QtNetwork.QNetworkRequest(QUrl_1)
#
self.QNetworkAccessManager_1.finished.connect(self.someurl2_finshed)
self.QNetworkAccessManager_1.get(QNetworkRequest_1)
def someurl2_finshed(self, NetworkReply):
page = bytes(NetworkReply.readAll())
# Do something with it
print(page)


kls = Example()
kls.start_request()

最佳答案

我对 PyQt 不熟悉,但从一般 Qt 编程的角度来看

  • 只使用一个 QNetworkAccessManager 是正确的设计选择
  • finished signal 提供了QNetworkReply*,我们可以使用request() 来识别对应的请求。 .

我希望这将解决您的一位经理和多个请求的问题。

This是执行相同操作的 C++ 示例。

关于qt - 当您在 QtNetwork 中执行多个请求时,您如何识别发出 QNetworkReply 完成信号以响应的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17508391/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com