在Qt 4中,#include <QtWidgets>无法工作。

5

一位开发人员使用QtWidgets为我们的软件添加了一个功能,据我所知这是QT5的特性。问题在于我们的软件仍然是为QT4设计的,我们还不能立即升级到最新版本的QT。当使用QT 4.8.5编译时,新功能在QT5中编译得很好,但会出现以下错误。

src\qt\snapwidget.h:3: error: QtWidgets: No such file or directory
#include <QtWidgets>
                   ^

有没有关于将QtWidgets回溯到旧版本的文档?也许在官方成为一项本地功能之前,有人正在开发类似窗口小部件的东西。


Qt5中的QtWidgets相当于Qt4中的QtGui。您可以使用宏来使包含依赖于Qt版本。 - user2672165
1个回答

16

控件不是Qt 5的功能,自从第一天起就在Qt中存在。


通常情况下,我建议不要使用此类按模块包含头文件的方法。它们将添加给定模块的所有包含文件,大大增加编译时间。相反,可以使用

#include <QClass>

只需调整下面我提到的.pro文件中的一个位置,就可以像现在这样正常工作,而无需修改所有源文件。


您的问题是Qt 4中没有“ QtWidgets”模块。 Qt 4中的小部件在“ gui”模块中。

因此,在Qt 4中,“等效”的代码行是:

#include <QtGui>

您可以使用QT_VERSION来使您的C++代码同时在Qt 4和5中工作:

#include <QtGlobal>
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
#  include <QtWidgets>
#else
#  include <QtGui>
#endif
.pro 文件中加入类似的逻辑,以链接 widgets 模块。Qt 4 和 Qt 5 默认仅链接 coregui 模块,但正如我刚才所说,这在 Qt 5 中不会为您带来小部件(widgets):
greaterThan(QT_MAJOR_VERSION, 4):QT += widgets

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接