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

4

之前我曾发帖讨论如何在WebView中显示Google Maps。后来发现需要安装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不能呢?

我也遇到了同样的问题。你有什么解决方案吗? - RajaRaviVarma
2个回答

2

显然, QML WebView 没有使用 Qt 的代理设置。我不知道这是否是预期行为还是出现了故障。建议按照此讨论中的建议设置 http_proxy 环境变量。


0

这段代码需要传递到第一个名为QMainWindowQWidget的Qt对象中,在构造函数内部是一个不错的选择。


在main函数内,紧随QApplication之后设置QNetworkProxy是可以的。 - Neel Basu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接