我正在尝试将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
文件中使用正确的包含路径和类名?
答案 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
...
}