没有系统设置的QtWebkit自定义DNS设置

时间:2017-10-27 08:07:34

标签: qt dns qtwebkit

出于某些原因,我想为我的每一个请求更改我的dns!我使用Qt 5.3和QtWebkit!我搜索但我找不到任何可以帮助我的东西!
实际上QDnsLookup不能强制QtWebkit将其load()函数设置为使用特定的查找,它最后使用系统Dns设置!
有什么想法吗?!

1 个答案:

答案 0 :(得分:0)

创建自己的QNAM子类和QWebPage子类。在那里实现DNS解析器。然后为您创建的每个QWebPage设置它。这样您就可以完全控制WebKit中发生的事情。 为了确保所有WebPages也将获得QNAM,子类QWebView并将QWebPage子类设置为构造函数中的页面。同时重载createWindow函数,以便将所有新的QWebView页面(如弹出窗口)创建为QWebView子类。

YourWebView::YourWebView(QWidget *parent):QWebView(parent)
{
    this->setPage(new YourWebPageSubclass());
    ...

QWebView * YourWebView::createWindow(QWebPage::WebWindowType type)
{
    YourWebView * view = Q_NULLPTR;    
    switch(type)
    {
    case QWebPage::WebBrowserWindow:
        view = new YourWebView(0);
        break;

    case QWebPage::WebModalDialog:
        view = new YourWebView(0);
        view->setWindowModality(Qt::ApplicationModal);
        break;
    }
    return view;
}

YourWebPageSubclass::YourWebPageSubclass(QObject *parent):QWebPage(parent)
{
    this->setNetworkAccessManager(new YourQNAM(this));
    ...