0
点赞
收藏
分享

微信扫一扫

C++ QT结合FFmpeg实战开发视频播放器-03QT项目的基础架构类和UI类


作者:虚幻私塾

早餐店不会开到晚上,想吃的人早就来了!😄

QT项目的基础架构类和UI类

一、QCoreApplication类和QObject

查看源码可发现​​QCoreApplication​​​ 继承于​​QObect​

C++ QT结合FFmpeg实战开发视频播放器-03QT项目的基础架构类和UI类_机制

, 查看​​QObect​​定义:

C++ QT结合FFmpeg实战开发视频播放器-03QT项目的基础架构类和UI类_继承体系_02

在QT中,所有的类的基类都是QObject,它也是QT模型的核心。

它包含了QT框架中的机制。包括信号槽的机制。这个机制类似于​​观察者​​的模式,这里你可以定义一些方法,当某一个对象的信息发生改变的时候,可以调用到你定制的回调函数当中。这部分在框架内部通过​​观察者模式​​实现了。

大家如果想知道QT信号槽机制如何实现。可以看一下QT这部分的源码实现。在这里我们不打算仔细讲这一块的原理。

C++ QT结合FFmpeg实战开发视频播放器-03QT项目的基础架构类和UI类_QT_03

二、Q_OBJECT宏定义

所有继承到​​QObject​​​的类 都放置了​​Q_OBJECT​​宏,

C++ QT结合FFmpeg实战开发视频播放器-03QT项目的基础架构类和UI类_继承体系_04

这个​​宏​​​可以做很多事情,​​宏​​实际上是一种语法糖,将代码的实现细节通过拼接语法的方式​​隐藏​​​起来,这个​​宏​​帮我们做了信号槽、国际化、对象反射的机制处理。由于这是实战课程,我们没有办法展开来讲。

大家需要记住就是很多操作其实时很多​​宏​​​处理的。当你看到我们的项目中有继承于​​QObject​​​体系的对象,那么这个​​宏​​一定要在这个对象里面。

​QGuiApplication​​​也是继承于​​QObject​​:

C++ QT结合FFmpeg实战开发视频播放器-03QT项目的基础架构类和UI类_机制_05

在我们的播放器项目中,也是按照这个继承体系来实现的。就是​​MainApp​​​这个类继承于​​QApplication​​,

C++ QT结合FFmpeg实战开发视频播放器-03QT项目的基础架构类和UI类_QT_06

​QApplication​​​继承于​​QGuiApplication​​,所以它也是最终去继承QObject类的。

C++ QT结合FFmpeg实战开发视频播放器-03QT项目的基础架构类和UI类_机制_07

按照一贯的原则,我们的​​MainApp​​​就需要定义​​Q_OBJECT​​宏,讲解这些是想让大家对QT的继承体系有一个大致的认识。

C++ QT结合FFmpeg实战开发视频播放器-03QT项目的基础架构类和UI类_QML_08

三、QQmlApplicationEngine类的介绍

回到创建的​​DemoPro1​​​项目,​​QQmlApplicationEngine​​​是继承于​​QQmlEngine​​​,​​QQmlEngine​​​继承于​​QJSEngine​​​,可以大致才出来,​​QML​​​是类似于​​JS​​​的脚本,它们都是继承于​​QObject​​的。

C++ QT结合FFmpeg实战开发视频播放器-03QT项目的基础架构类和UI类_QT_09

所有我们的​​main.cpp​​​中是通过​​engine​​​这个对象来加载​​QML​​脚本的。

C++ QT结合FFmpeg实战开发视频播放器-03QT项目的基础架构类和UI类_机制_10

在我们的播放器项目中,可以看到在​​MainApp.h​​​中有一个成员变量,他是一个指针,它放置的​​QQmlApplicationEngine​​​就负责QML脚本的加载。这里用的就是组合的方式,来将QML和UI的初始化放在了​​MainApp​​对象的内部完成。

C++ QT结合FFmpeg实战开发视频播放器-03QT项目的基础架构类和UI类_QT_11

我们可以看一下​​QMLEngine​​的基本使用

C++ QT结合FFmpeg实战开发视频播放器-03QT项目的基础架构类和UI类_QApplication_12

回到创建的​​DemoPro1​​项目,如果我们想要编写QML中的东西,可以直接编辑QML文件,比如修改标题:

Window {
visible: true
width: 640
height: 480
title: qsTr("Xuhss.com")
}

可以看到对话框被成功修改

C++ QT结合FFmpeg实战开发视频播放器-03QT项目的基础架构类和UI类_继承体系_13

四、总结

  • 本文讲解QT的继承体系,讲解这些是想让大家对QT的继承体系有一个大致的认识。 。



举报

相关推荐

0 条评论