Qt是如何在C++基础上扩展的

写在前面

Qt 是一个建立在 C++ 之上的框架,它扩展了 C++ 的功能,使得开发者可以更容易地开发跨平台的应用程序。Qt 的设计哲学和功能集都与 C++ 紧密相关,但同时也提供了比纯 C++ 更高的生产力和更丰富的功能。

Qt如何在C++基础上扩展的

这里新建一个C++项目和QWidget项目比较。

自动生成的文件及代码比较:
1
属性页比较:
2
可以看到创建的Qt项目比标准C++项目多了了几行代码,多了几个Qt相关的配置。

多出的代码如下:

QApplication a(argc, argv);    //创建一个唯一的QApplication对象
QObjectTest w;                //创建了一个QWidget对象
w.show();                    //显示QWidget对象
return a.exec();            //进入唯一的QApplication对象的消息循环

可以看到创建Qt项目时,会自动创建一个QApplication对象和一个窗体对象,然后显示这个窗体并进入桌面应用都必须要有的消息循环。

Qt项目多出的配置如下:
3
可以看到多出的配置有:

Qt Project Settings(同.pro文件),Qt项目相关配置

Qt Meta-Object Complier: Qt元对象编译器moc,用来编译所有带Q_OBJECT宏的类所属的源文件。

Qt Resource Complier: Qt资源对象编译器rcc,用来编译Qt资源文件.qrc。这里还包含了Qt Quick Complier编译器,用来编译QML,这里以QWidget为主,不作讨论。

Qt User Interface Complier: Qt用户界面编译器uic,用来编译用户界面文件.ui。

这几个编译器是何时作用的,这里编译项目看编译输出:
4
至此可以知道Qt在C++项目的编译编译流程中添加了uic、rcc、moc等编译器的编译,如图:
5
6

普通C++类使用Qt核心特性

要想使普通C++类附带Qt的核心特性,需满足:

①必须在Qt开发环境(即Qt项目)中

②使该类继承QObject

③声明Q_OBJECT宏

这里创建一个C++类CppTest:
7
重新生成,可以看到直接到编译步骤,未涉及Qt相关的编译:
8

添加QObject类继承以及Q_OBJECT宏后,重新编译:
9
注意:继承QObject、添加Q_OBJECT宏缺一不可!!!

单独继承QObject而不声明Q_OBJECT宏,不会进入Qt相关编译流程:
10
单独声明Q_OBJECT宏,而不继承Q_Object,编译报错:
11
C++类继承QObject并添加Q_OBJECT宏后,就可以在该类中使用Qt的动态属性、GUI、信号和槽、模型/视图、插件、绘图、动画等核心特性了。

标准C++项目无法直接转成Qt项目

无法在VS中通过配置设置添加Qt环境!!!
无法在VS中通过配置设置添加Qt环境!!!
无法在VS中通过配置设置添加Qt环境!!!

即属性中只能添加Qt相关的头文件和库,无法改变当前项目的编译过程(无法添加moc元对象编译器、uic用户界面文件编译器、qrc资源文件编译器及相应的配置选项)。
12<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值