Qt QWebEngineView在发布中找不到javascript文件,但在调试中

时间:2019-07-05 09:18:11

标签: javascript qt release referenceerror qwebengineview

使用带有QWebEngineView的googlemap,我想在HTML文件中添加myscript.js。它在调试中效果很好,但在发行版中效果不佳。在发布模式下,找不到带有错误js的myscript.js:未捕获(已承诺)ReferenceError:未定义myscriptNameSpace

我正在使用Qt 5.12.2,MSVC 2017

我的qrc文件

<RCC>
    <qresource prefix="/">
        <file>html/googlemap.html</file>
        <file>js/myscript.js</file>
    </qresource>
</RCC>

我的.h文件

class GoogleMapWebEngine : public QWidget
{
    Q_OBJECT

public:
    explicit GoogleMapWebEngine(QWidget *parent = nullptr);
    virtual ~GoogleMapWebEngine() override;

protected:
    virtual void wheelEvent(QWheelEvent * event) override;

private:
    Ui::GoogleMapWebEngine *ui;
    QWebEngineView* m_webview;
    QWebChannel* m_webChannel;
};

我的.cpp文件

GoogleMapWebEngine::GoogleMapWebEngine(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::GoogleMapWebEngine)
{
    qputenv("QTWEBENGINE_REMOTE_DEBUGGING", "1234");
    ui->setupUi(this);

    m_webview = new QWebEngineView();
    m_webChannel = new QWebChannel();
    m_webChannel->registerObject("goolemainWindow", this);
    m_webview->page()->setWebChannel(m_webChannel);

    QUrl url = QUrl("qrc:/html/googlemap.html");
    m_webview->setUrl(url);
    ui->verticalLayout->addWidget(m_webview);
}

我的googlemap.html文件

<html>
    <head>
        ...
        <script src="qrc:/js/myscript.js"></script>

        <script type="text/javascript">           
            function initMap()
            {
                var
                    mapCenter = [32.794488, -96.780372],
                    mapOptions = {
                        zoom: 18,
                        center: new google.maps.LatLng(mapCenter[0], mapCenter[1]),
                        mapTypeId: google.maps.MapTypeId.SATELLITE

                    },
                    map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
                    myscriptNameSpace.test();
            }
        </script>        
    </head>

    <body ondragstart="return false">
        <div id="map-canvas" />
        <script async defer src="https://maps.googleapis.com/maps/api/js?key=myKey&callback=initMap"></script>
    </body>
</html>

myscript.js

var myscriptNameSpace = {}
myscriptNameSpace.test = function(){
    alert('test');
}

预期:必须显示警报消息

当前错误:js:未捕获(按承诺)ReferenceError:未定义myscriptNameSpace

可以在这里找到我的完整源代码:github.com/hunglxtp/googlemapTest

1 个答案:

答案 0 :(得分:1)

我终于从qt documentation找到了问题。 我的解决方案是在.pro文件中添加:QTQUICK_COMPILER_SKIPPED_RESOURCES += testgooglemapwebengine.qrc