Search code examples
c++qtmingwqtwebkitqwebview

How to compile qtwebkit plugins?


QtWebkit-plugins is a library that provides features to the QWebView, eg SpellCheck and Notification Web API.

Read about:

I tried to compile the code in Windows, but my QWebView not working as expected, in other words, SpellCheck and Notification Web API not working. It's like I've been not-using QtWebkit-plugins. Which can be?

In the documentation that says to compile I have to run:

$ qmake
$ make && make install

Read more in QtWebkit-plugins repository

I'm using mingw, instead of make I used mingw32-make:

  • I compiled hunspell
  • Copied hunspell for C:\Qt5.4.0\5.4\mingw491_32\bin and C:\Qt5.4.0\5.4\mingw491_32\lib
  • I compiled qtwebkit-plugins using in cmd:

    qmake
    mingw32-make && mingw32-make install
    
  • mingw32-make generated libqtwebkitpluginsd.a and qtwebkitplugins.dll

  • Copied libqtwebkitpluginsd.a for C:\Qt5.4.0\5.4\mingw491_32\lib
  • Copied qtwebkitplugins.dll for C:\Qt5.4.0\5.4\mingw491_32\plugins\webkit and C:\Qt5.4.0\5.4\mingw491_32\bin

After that I compiled another simple project that uses QWebView then tested the SpellCheck in a <textarea spellcheck="true"></textarea> and did not work.

I tested the Notification Web API and also did not work.

Note: When running my project using QT_DEBUG_PLUGINS=1 and use Notification Web API in the application output tab (in QtCreator) returns:

Found metadata in lib C:/Qt5.4.0/5.4/mingw491_32/plugins/webkit/qtwebkitplugins.dll, metadata=
{
    "IID": "org.qtwebkit.QtWebKit.QtWebKitPlugin",
    "MetaData": {
    },
    "className": "QtWebKitPlugin",
    "debug": false,
    "version": 328704
}


loaded library "C:/Qt5.4.0/5.4/mingw491_32/plugins/webkit/qtwebkitplugins.dll"
QLibraryPrivate::unload succeeded on "C:/Qt5.4.0/5.4/mingw491_32/plugins/webkit/qtwebkitplugins.dll" 
QSystemTrayIcon::setVisible: No Icon set

It seems to me that the dll is loaded, it just is not working.

How do my projects work these features?


Solution

  • For this work in QT-5.2+ is necessary to modified the qwebkitplatformplugin.h file

    Change this:

    QT_BEGIN_NAMESPACE
    Q_DECLARE_INTERFACE(QWebKitPlatformPlugin, "com.nokia.Qt.WebKit.PlatformPlugin/1.9");
    

    By this:

    QT_BEGIN_NAMESPACE
    Q_DECLARE_INTERFACE(QWebKitPlatformPlugin,
        "org.qt-project.Qt.WebKit.PlatformPlugin/1.9");
    

    If needed compatibility with QT-4.8 change the code for this:

    QT_BEGIN_NAMESPACE
    #if QT_VERSION >= 0x050200
    Q_DECLARE_INTERFACE(QWebKitPlatformPlugin, "org.qt-project.Qt.WebKit.PlatformPlugin/1.9")
    #else
    Q_DECLARE_INTERFACE(QWebKitPlatformPlugin, "com.nokia.Qt.WebKit.PlatformPlugin/1.9")
    #endif
    QT_END_NAMESPACE