从Qt5的改变看最佳头文件包含风格?

老邓 2011-12-31 08:40:31
老版本:
#include <QApplication>
#include <QString>


忘了哪本书上推荐这样包含:
#include <QtGui/QApplication>
#include <QtCore/QString>


而今天在测试Qt5代码时发现:QApplication已经从原来的<QtGui/QApplication>移动到<QtWidgets/QApplication>了。
而QtGui中多了一个:<QtWidgets/QGuiApplication>

如果你的代码即要用Qt4编译,又要用Qt5编译,怎么办?
难道只能添加#if.../#else.../#endif?

所以,个人觉得最佳的包含风格仍然是老版的:
#include <QApplication>
#include <QString>
#include <QTextDocument>
#include <QTextCursor>


这将同时兼容Qt4与Qt5!
因为只要在Qt工程文件中添加了类似这样的语句:
QT += core gui widgets

则相应头文件的路径会自动到搜索列表里,而无需担心头文件找不到的问题。
并且,Qt的类中,是不可能存在重名的。
这不但提高了通用性,还简化了我们的记忆:我们并不需要知道某个类是属于哪个模块的。
只管交给qmake来处理就可以了。

个人观点,不妥处请指正。
...全文
4945 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
hsljz 2013-10-24
  • 打赏
  • 举报
回复
Nice 啊
huanghaizilu 2013-09-13
  • 打赏
  • 举报
回复
好文!!学习了
lbx6z 2013-08-27
  • 打赏
  • 举报
回复
嗯嗯,终于解决了。都要哭了~~~~谢谢分享!
  • 打赏
  • 举报
回复
版主,你好,我是第一次接触qt5编程,编译是出大错了,不知道怎么办
zhing22 2013-07-23
  • 打赏
  • 举报
回复
感谢老邓的提醒
Red_angelX 2012-05-14
  • 打赏
  • 举报
回复
QtScript已经进入第一阵容了
但是仍然是那么的臃肿和不方便 o(︶︿︶)o 唉
据说集成了V8引擎,但是接口实在是有点难看
  • 打赏
  • 举报
回复
怀旧的感觉啊
flight9 2012-05-14
  • 打赏
  • 举报
回复
谢谢提醒,个人也觉得老风格比较好。
beyondma 2012-05-13
  • 打赏
  • 举报
回复
这个铁不错啊,值得一读,加精了.
hemiya 2012-05-12
  • 打赏
  • 举报
回复
老邓 2012-05-11
  • 打赏
  • 举报
回复
https://codereview.qt-project.org/#patch,sidebyside,25978,1,doc/api/coding-style.qdoc
通过这个改动可以看到,我提到的头文件包含风格的改变是正常的。
这将同时兼容Qt4与Qt5,甚至将来的Qt6。
donwmufromdying 2012-01-05
  • 打赏
  • 举报
回复
唉,你们都用上Qt5了。我还在折腾Qt3.3的东西。痛苦啊
奔跑吧猴哥 2012-01-04
  • 打赏
  • 举报
回复
Qt的功能将更强大,更全面,不只限于GUI方面。所以重构在所难免。
mitiao 2012-01-02
  • 打赏
  • 举报
回复
感觉一头雾水。。。
zhu_xz 2012-01-01
  • 打赏
  • 举报
回复
include语句中加上比如QtGui、QtWidgets的前缀是因为MAC的一些局限性,在其他平台上不是必须的。



“而QtGui中多了一个:<QtWidgets/QGuiApplication>”
应该是QtGui/QGuiApplication,主要原因是在Qt5里面widgets不再是GUI模块的一部分了,而成了一个独立的模块,因此在GUI模块里面有了一个QGuiApplication类,而原来的QApplication被移动到Widgets模块了
三条猫 2012-01-01
  • 打赏
  • 举报
回复
老邓的技术贴都要顶
树先生1991 2012-01-01
  • 打赏
  • 举报
回复
请问下 我现在装了的qt是集成在vs2008 中的,但是我在网上下载的一些源码的工程文件是pro格式的,所以我就又下载了一个qtcreator,仅仅是个编辑器,请问怎么设置啊?
老邓 2012-01-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhu_xz 的回复:]
include语句中加上比如QtGui、QtWidgets的前缀是因为MAC的一些局限性,在其他平台上不是必须的。
[/Quote]
我没有MAC平台,现在还有这种局限性?(有文章介绍是什么样的局限性么?)
那如何让代码同时兼容Qt4/Qt5,难道只能用宏?
zhu_xz 2012-01-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 loaden 的回复:]

这条规则只是针对Qt本身的代码编写规范吧?
如果只是使用基于Qt的代码呢?

如果API变了,当然只能用宏了。
不过,头文件只是移到了一个不同的位置,再用宏,太麻烦了。

我想确定一个基于Qt的程序,这样的头文件包含是否能正常编译?
[/Quote]
我对MAC不熟悉,所以不太清楚......
但最起码在引用是不给出比如QtGui这部分的程序在Linux和Windows上编译起来是完全没有问题的。
zhu_xz 2012-01-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 yiyaaixuexi 的回复:]

widgets不再是GUI的一部分了,我越来越不懂Qt的套路了
[/Quote]
因为还有QML啊!
加载更多回复(6)

16,238

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧