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

qt xuhss 295℃ 0评论

作者:虚幻私塾
博客:https://xuhss.com

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

一、QCoreApplication类和QObject

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

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

, 查看QObect定义:

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

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

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

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

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

二、Q_OBJECT宏定义

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

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

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

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

QGuiApplication也是继承于QObject

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

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

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

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

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

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

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

三、QQmlApplicationEngine类的介绍

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

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

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

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

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

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

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

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

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

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

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

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

四、总结

  • 本文讲解QT的继承体系,讲解这些是想让大家对QT的继承体系有一个大致的认识。 。
  • 如果觉得文章对你有用处,记得 点赞 收藏 转发 一波哦,博主也支持为铁粉丝制作专属动态壁纸哦~

? 往期优质文章分享

? 优质教程分享 ?

  • ?如果感觉文章看完了不过瘾,可以来我的其他 专栏 看一下哦~
  • ?比如以下几个专栏:Python实战微信订餐小程序、Python量化交易实战、C++ QT实战类项目 和 算法学习专栏
  • ?可以学习更多的关于C++/Python的相关内容哦!直接点击下面颜色字体就可以跳转啦!
学习路线指引(点击解锁) 知识定位 人群定位
? Python实战微信订餐小程序 ? 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
?Python量化交易实战? 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统
❤️ C++ QT结合FFmpeg实战开发视频播放器❤️ 难度偏高 分享学习QT成品的视频播放器源码,需要有扎实的C++知识!
? 游戏爱好者九万人社区? 互助/吹水 九万人游戏爱好者社区,聊天互助,白嫖奖品
? Python零基础到入门 ? Python初学者 针对没有经过系统学习的小伙伴,核心目的就是让我们能够快速学习Python的知识以达到入门

? 资料白嫖,温馨提示 ?

关注下面卡片即刻获取更多编程知识,包括各种语言学习资料,上千套PPT模板和各种小程序、Web、客户端项目源码等等资料。更多内容可自行查看哦!

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

转载请注明:xuhss » C++ QT结合FFmpeg实战开发视频播放器-03QT项目的基础架构类和UI类

喜欢 (2)

您必须 登录 才能发表评论!