gpt4 book ai didi

c++ - Qt 从 SoapRequest 获取响应

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:03:42 24 4
gpt4 key购买 nike

使用 QtSoap 库在 Qt 中考虑以下内容:

 QtSoapHttpTransport http;
http.setHost("XXXX",3333);
connect(&http, SIGNAL(responseReady()), this, SLOT(getResponse()));

现在有一个我想调用的方法是:

QtSoapMessage request;
request.setMethod("test");
request.addMethodArgument("xxx","zzzz",xxx);
request.addMethodArgument("xx","xx",xx);
http.submitRequest(Request, "/api/soap");

现在我想要这样的东西:

QString GetTest(){
while(http.isBusy); // no such a thing as isbusy
return http.getResponse().returnValue().toString();}

或任何我可以用来获取返回值或等待并获取返回值的技术..

提前致谢...

最佳答案

我看不出有什么问题。 QtSoapHttpTransport reference已经有一个很好的简单示例。

如果您希望有一个仅在收到响应时才阻塞并返回的 getter,那么进行主动等待(您的 while 循环)绝对不是一个好方法。

您已经将 responseReady 信号连接到您的插槽,因此唯一缺少的是有一个同步点来阻止您的线程调用 getTest 直到执行此插槽.

class Messenger : public QObject {
Q_OBJECT
public:
Messenger() { /* ... your initialization code with connect ... */ }

void sendRequest() { /* ... your sending code ... */ }

QString getTest() // call this from a worker thread to wait
{ // for a response to arrive and retrieve it
QMutexLocker lock(&responseMutex);
responseReady.wait(&responseMutex);
return http.getResponse().returnValue().toString();
}

public slots:
void getResponse() { // slot called by Qt event loop when response arrives
responseReady.wakeAll();
}

private:
QtSoapHttpTransport http;
QWaitCondition responseReady;
QMutex responseMutex;
};

请注意,只有当您有一个多线程应用程序并且调用 getTest 的线程是工作线程而不是事件驱动线程时,这种设计才有意义。

另一方面,如果您的应用程序只是想对接收到的响应做一些,恕我直言,您一开始就没有理由需要一个阻塞方法。直接在插槽中执行您的操作 - 就像在 Qt 文档中一样。

关于c++ - Qt 从 SoapRequest 获取响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4008362/

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