gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:19:34 25 4
gpt4 key购买 nike

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

最佳答案

您不能在 .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
...
}

关于c++ - 根据 Qt 版本在 .ui 文件中引用 WebKit 或 WebEngine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41049586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com