我正在使用Qt作为主要的IDE开发一个共享库。该库应动态链接到任何使用它的应用程序中,并且需要在Windows、OSX和Linux上使用,未来还计划支持移动平台。
Qt加载了多个非常有用的库,如QString(用于Unicode)和QNetwork。目前,我仅使用QtCore库,但发现需要在共享库中进行一些REST调用。我很快找到了几个指南,以在Qt中使用QNetworkAccessManager进行REST调用。然而,这些指南都是基于应用程序模板而不是库。显然,在我的共享库中没有控制台、GUI或主函数。
在使用QNetworkAccessManager时,QtCoreApplication总是出现在示例中。从文档中可以看到,它被描述为:
QtCoreApplication类为控制台Qt应用程序提供事件循环
我的库创建方式包含多个独立的函数,永远不需要任何控制台。执行REST调用的函数是独立的,可以在此处创建QCoreApplication和QNetworkAccessManager,然后在接收结果后删除它们。
这种方式可行吗?我尝试让它工作,但在尝试执行QtCoreApplication时程序停止了。
任何帮助都非常感激!!!
Qt加载了多个非常有用的库,如QString(用于Unicode)和QNetwork。目前,我仅使用QtCore库,但发现需要在共享库中进行一些REST调用。我很快找到了几个指南,以在Qt中使用QNetworkAccessManager进行REST调用。然而,这些指南都是基于应用程序模板而不是库。显然,在我的共享库中没有控制台、GUI或主函数。
在使用QNetworkAccessManager时,QtCoreApplication总是出现在示例中。从文档中可以看到,它被描述为:
QtCoreApplication类为控制台Qt应用程序提供事件循环
我的库创建方式包含多个独立的函数,永远不需要任何控制台。执行REST调用的函数是独立的,可以在此处创建QCoreApplication和QNetworkAccessManager,然后在接收结果后删除它们。
这种方式可行吗?我尝试让它工作,但在尝试执行QtCoreApplication时程序停止了。
int argc = 1;
char appname[] = "App";
char* argv[] = {appname, NULL};
QCoreApplication app = new QCoreApplication(QAppPriv::argc, QAppPriv::argv);
app->exec();
我之前在“MakeRequest”函数中运行了以下代码,但出现了错误信息:“QEventLoop:无法在没有 QApplication 的情况下使用”:
QTimer timer;
timer.setSingleShot(true);
// Create custom temporary event loop on stack
QEventLoop eventLoop;
timer.start(5000);
// "quit()" the event-loop, when the network request "finished()"
QNetworkAccessManager mgr;
QObject::connect(&timer, SIGNAL(timeout()), &eventLoop, SLOT(quit()));
QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(serviceRequestFinished(QNetworkReply*)));
QUrl url( QString("http://ip.jsontest.com/") );
QNetworkReply* reply = mgr.get(QNetworkRequest(url));
eventLoop.exec();
任何帮助都非常感激!!!