#include <QtWidgets>在Qt 4中无效

Pet*_*ell 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>
                   ^
Run Code Online (Sandbox Code Playgroud)

是否有任何关于将QtWidgets移植到旧版QT的文档?也许有人在它作为原生特征进入之前就开始制作像小部件一样的东西.

pep*_*ppe 14

小部件不是Qt 5功能.他们从第1天起就在Qt.


一般来说,我建议不要使用这样的每个模块包含.他们将为给定模块添加所有包含,大大提高了编译时间.相反,你可以使用

#include <QClass>
Run Code Online (Sandbox Code Playgroud)

它也可以正常工作,只需要调整.pro我下面说的文件(一个地方,而不是修改所有源文件).


你的问题是Qt 4中没有"QtWidgets"模块.Qt 4中的小部件位于"gui"模块中.

因此,Qt 4中的"等效"线是

#include <QtGui>
Run Code Online (Sandbox Code Playgroud)

你可以使用QT_VERSIONQt 4和5来使你的C++代码工作:

#include <QtGlobal>
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
#  include <QtWidgets>
#else
#  include <QtGui>
#endif
Run Code Online (Sandbox Code Playgroud)

.pro文件中添加类似的逻辑以链接widgets模块.Qt 4和Qt 5默认只链接coregui模块,但正如我刚才所说,这不会给你带来Qt 5中的小部件:

greaterThan(QT_MAJOR_VERSION, 4):QT += widgets
Run Code Online (Sandbox Code Playgroud)