根据Qt版本在.ui文件中引用WebKit或WebEngine

时间:2016-12-08 21:59:31

标签: c++ qt

我正在尝试将Qt应用程序从5.3.1升级到5.7.0。主要变化是从WebKit迁移到WebEngine。 http://doc.qt.io/qt-5/qtwebenginewidgets-qtwebkitportingguide.html

我们还没有准备好停止使用5.3.1,所以我创建了一个基于Qt版本的预处理器定义。这适用于项目文件,类源和类头。但是,我没有看到在.ui文件中执行此操作的方法。

Qt版本用于在.pro文件中定义预处理器定义:

greaterThan(QT_MAJOR_VERSION, 4) {
    QT += widgets

    greaterThan(QT_MINOR_VERSION, 5) {
        QT += webengine webenginewidgets
        DEFINES += _WEBENGINE_
    } else {
        QT += webkit       webkitwidgets
    }
}

这适用于.cpp文件:

#ifdef _WEBENGINE_
    #include <QWebEngineView>
    #include <QWebEnginePage>
    #include <QWebEngineFrame>
    #include <QWebEngineElement>
#else
    #include <QWebView>
    #include <QWebPage>
    #include <QWebFrame>
    #include <QWebElement>
#endif // _WEBENGINE_

这些是.ui文件中的违规参考:

<widget class="QWebView" name="webView" native="true">
...
</widget>
...
<customwidget>
 <class>QWebView</class>
 <extends>QWidget</extends>
 <header>QtWebKit/QWebView</header>
</customwidget>

这导致ui_*.h文件:

#include <QtWebKitWidgets/QWebView>
...
public:
    QWebView *webView;

如何根据Qt版本在.ui文件中使用正确的包含路径和类名?

1 个答案:

答案 0 :(得分:1)

您无法在.ui文件中执行此操作。解决这个问题的常用方法是创建自己的包装器小部件,并在.ui文件中使用它。

class MyWebView : public QWidget
{ .... }

MyWebView::MyWebView(QObject *parent) : QWidget(parent)
{
#ifdef _WEBENGINE_
    // add webengineview to layout so it takes all space
#else
    // add webview to layout so it takes all space
#endif
    ...
}