如何在Qt中设置应用程序范围的代理设置?

时间:2013-07-23 21:24:01

标签: qt proxy

我之前发布过关于让Google地图在WebView中显示的努力。我发现我需要安装OpenSSL,以便HTTPS可以用于某些Google API。

这一切都很好但是现在在另一台机器上我正在配置Qt以使用系统代理。对于这个,我们有一个不需要身份验证的系统代理,也有一个。默认代理是需要身份验证的代理。

我有以下代码来指定代理:

#include <QtGui/QGuiApplication>
#include "qtquick2applicationviewer.h"
#include <QNetworkProxy>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QNetworkProxy proxy;
     proxy.setType(QNetworkProxy::HttpProxy);
     proxy.setHostName("url.of.proxy.not.requiring.authentication");
     proxy.setPort(8080);
     QNetworkProxy::setApplicationProxy(proxy);

    QtQuick2ApplicationViewer viewer;
    viewer.setMainQmlFile(QStringLiteral("qml/Maps/main.qml"));
    viewer.showExpanded();

    return app.exec();
}

当我运行这个应用程序时,我得到一个在WebView中显示的网页,其内容状态存在错误407,因为代理需要身份验证,此页面中指定的代理地址是默认的,而不是我明确告诉Qt的那个使用。

如何让Qt使用我希望它使用的实际代理?这台机器上的所有其他应用程序都可以使用它,为什么不Qt?

2 个答案:

答案 0 :(得分:2)

显然QML WebView不使用Qt代理设置。我不知道这是否是预期的行为,或者它只是被打破了。尝试按照this discussion中的建议设置http_proxy环境变量。

答案 1 :(得分:0)

此代码需要在名为function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } async function test() { console.log("1"); console.log("2"); await sleep(2000); console.log("3"); console.log("4"); await sleep(2000); console.log("5"); } test();QMainWindow的第一个Qt对象内传递,构造函数内部是一个不错的选择。