如何找出QML WebView页面加载失败的原因

时间:2012-09-26 17:16:14

标签: qt debugging qt4 qml qtwebkit

我尝试使用QML WebView打开本地页面(WebOS应用程序)

import QtQuick 1.1
import QtWebKit 1.0
import com.nokia.meego 1.0

Page 
{
    id: mainPage
    Flickable
    {
        id: appFlickable
        anchors.fill: parent
        clip: true

        contentHeight: appView.height
        contentWidth: appView.width

        WebView
        {
            id: appView
            preferredHeight: parent.height
            preferredWidth: parent.width
            url: appUrl
            settings.javascriptCanOpenWindows: true
            settings.javascriptEnabled: true
            settings.autoLoadImages: true
            settings.javascriptCanAccessClipboard: true
            settings.developerExtrasEnabled: true
            onLoadFailed: console.log("load failed")
            onLoadFinished: console.log("load finished")
        }
    }
}

我用main.cpp加载它:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QDeclarativeView view;
    view.rootContext()->setContextProperty("appUrl", argv[1]);
    view.setSource(QUrl("qrc:/qml/main.qml"));
    view.showFullScreen();
    return app.exec();
}

我总是遇到负载失败。有什么方法可以找出问题,启用一些Web控制台向我显示失败的原因。

由于

的Marcin

1 个答案:

答案 0 :(得分:1)

最有可能WebView::onLoadFailed调用网络错误(无法访问或无效的网址等)。

您可以尝试做的是收听NetworkAccessManager的finished信号,以检查网络回复是否错误。

connect (viewer.engine()->networkAccessManager(), SIGNAL(finished(QNetworkReply*)),
         logger, SLOT(onNetworkRequestFinished(QNetworkReply*)));

其中logger是带onNetworkRequestFinished个插槽的QObject。

void Logger::onNetworkRequestFinished(QNetworkReply* reply)
{
    if (reply->error() != QNetworkReply::NoError) {
        qDebug() << "network error:" << reply->errorString();
    }
    reply->deleteLater();
}

有关详细信息,请参阅QNetworkReply documentation