qt - #include <QtWidgets> 在 Qt 4 中不起作用

标签 qt qt5

一位开发人员使用 QtWidgets 向我们的软件添加了一项功能,据我所知,这是一项 QT5 功能。问题是我们的软件仍然是为 QT4 设计的,我们还不能迁移到最新版本的 QT。新功能在 QT5 中编译时效果很好,但在尝试使用 QT 4.8.5 编译时会出现以下错误。

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

是否有关于将 QtWidgets 反向移植到旧版 QT 的文档?也许有人在作为原生功能进入之前正在制作类似小部件的东西。

最佳答案

小部件不是 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 中的小部件:
greaterThan(QT_MAJOR_VERSION, 4):QT += widgets

关于qt - #include <QtWidgets> 在 Qt 4 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23979798/

相关文章:

c++ - 如何在ubuntu中处理Qt5.7中的全局键

c++ - 在 Linux 中使用 Qt 的 Close() 文件描述符

c++ - 启动 Qt5 控制台应用程序 : invokemethod vs singleshot timer

c++ - Qt 5 Qt3D QCircularBuffer 在哪里?

qt - 部署 QT 应用程序

c++ - 使用参数执行 .bat 文件并读取 C++ 中的控制台输出

c++ - 通过qtcreator/qtdesigner给QMenu添加QWidgetAction

macos - Qt 5.4 OS X 如何在 QMenu 和 QToolBar 中使用 QAction,但仅在 QToolbar 中显示图标

c++ - QState::assignProperty 不起作用

c++局部变量被覆盖(但仅在某些笔记本上)