当前位置: 首页 > ops >正文

C++ QT结合FFmpeg实战开发视频播放器-08播放器项目的整体UI架构

作者:虚坏叔叔
博客:https://xuhss.com

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

一、QT项目设置文件MyPlayer.Pro的讲解

MyPlayer.Pro项目文件定义整个项目的设置。我们来看下这个文件的具体含义。

这个项目首先使用了QT的模板app

# Project Type
TEMPLATE = app

下面确定了QT要引用的模块,

# Qt modules that are used by your project
QT += qml quick gui widgets multimedia opengl openglextensions

工程编译选项需要定义QT以及C++11STL等一系列标准,

# Project configuration and compiler options
CONFIG += qt warn_on c++11 rtti stl thread exceptions

设置moc文件的路径:moc文件是由 系统中的QT开发环境根据头文件中的来生成的。我们编译之后,就能看到moc文件。

# Directory where all intermediate objects and moc files should be placed
CONFIG(debug, debug|release) {OBJECTS_DIR = ./tmp/debugMOC_DIR = ./tmp/debug
} else {OBJECTS_DIR = ./tmp/releaseMOC_DIR = ./tmp/release
}

临时文件以及资源的配置文件

# Directory where all intermediate files from uic should be placed
CONFIG(debug, debug|release) {UI_DIR = ./tmp/debug
} else {UI_DIR = ./tmp/release
}# Directory for Qt Resource Compiler output files
CONFIG(debug, debug|release) {RCC_DIR = ./tmp/debug
} else {RCC_DIR = ./tmp/release
}

指定DebugRelease生成文件的目录。

# Specifies where to put the target file
CONFIG(debug, debug|release) {contains(QMAKE_TARGET.arch, x86_64) {DESTDIR = $$_PRO_FILE_/../../../bin/debug/x64} else {DESTDIR = $$_PRO_FILE_/../../../bin/debug/x86}
} else {contains(QMAKE_TARGET.arch, x86_64) {DESTDIR = $$_PRO_FILE_/../../../bin/release/x64} else {DESTDIR = $$_PRO_FILE_/../../../bin/release/x86}
}

工程的名称叫做MyPlayer

# Name of the target file
TARGET = MYPlayer

定义了资源文件的名称以及编码方式

# Name of the resource collection files (qrc) for the target
RESOURCES += resource/MYPlayer.qrc
#RESOURCES += qml.qrc# Codec configuration
CODECFORTR = UTF-8
CODECFORSRC = UTF-8

资源文件还包含了qmljs文件

# Source files which contains strings for i18n
lupdate_only {SOURCES += resource/ui/qml/*.qml \resource/ui/qml/*.js
}

定义了翻译文件,支持中文翻译,帮助开发多语言的软件。

# Translation file path
TRANSLATIONS += ./resource/ui/translation/MYPlayer_zh_CN.ts

在这里插入图片描述

这里是我们需要添加的源文件:

# Source files in the project
SOURCES += \MYAudioPlay.cpp \MYAudioThread.cpp \MYDecode.cpp \MYDecodeThread.cpp \MYDemux.cpp \MYDemuxThread.cpp \MYResample.cpp \MYVideoThread.cpp \MYVideoOutput.cpp \MYPlay.cpp \main.cpp \MainApp.cpp \MYSubTitle.cpp \

以及头文件:

# Header files for the project
HEADERS += MainApp.h \IVideoCall.h \MYAudioPlay.h \MYAudioThread.h \MYDecode.h \MYDecodeThread.h \MYDemux.h \MYDemuxThread.h \MYResample.h \MYVideoThread.h \MYVideoOutput.h \MYPlay.h \MYSubTitle.h \

项目中使用到的头文件包含路径:

# Include path
INCLUDEPATH += ../../include

项目中需要使用到的库文件包含路径:

# Libaray path and libaray
CONFIG(debug, debug|release) {contains(QMAKE_TARGET.arch, x86_64) {LIBS += -L"$$PWD/../../lib/debug/x64/"} else {LIBS += -L"$$PWD/../../lib/debug/x86/"}
#    win32:LIBS += libqrencode.lib\
#                  libzint.lib
#    unix:LIBS += -lqrencode\
#                 -lzint
} else {contains(QMAKE_TARGET.arch, x86_64) {LIBS += -L"$$PWD/../../lib/release/x64/"} else {LIBS += -L"$$PWD/../../lib/release/x86/"}
#    win32:LIBS += libqrencode.lib\
#                  libzint.lib
#    unix:LIBS += -lqrencode\
#                 -lzint
}
win32:LIBS += avformat.lib\avcodec.lib\avutil.lib\swresample.lib\swscale.lib

Win32平台下还需要rc的资源文件:

# Windows platform
win32 {RC_FILE = win32/MYPlayer.rcHEADERS += win32/targetver.h \win32/resource.hOTHER_FILES += win32/MYPlayer.rc
}

其他平台我们并没有维护:

################################################################################
# Linux platform
linux {
}################################################################################
# Mac OS X platform
macx {
}

我们保证是默认的就可以。

二 、在Visual Studio环境下程序启动源代码

双击GenerateVCProj.bat文件,会自动生成MYPlayer.vcxproj

在这里插入图片描述
在这里插入图片描述

查看MainApp.h,为什么要继承QApplication,因为我们希望在MainApp这个类中完成程序初始化的工作,这部分初始化的工作的目的是为了建立界面管理的机制。

在这里插入图片描述

可以先看下这个类的成员变量

在这里插入图片描述

类的方法:
在这里插入图片描述

[

Q_PROPERTY实现界面层和复杂的逻辑处理绑定

绑定了demoNum变量读、写、更改方法:

// For QML property(-ies)
// e.g.
Q_PROPERTY(int demoNum READ demoNum WRITE setDemoNum NOTIFY demoNumChanged)// For QML property(-ies)
// e.g.
// demoNum
int demoNum() const;
void setDemoNum(int newValue);QString language() const;
void setLanguage(QString newValue);

三、总结

  • 本文讲解了整体的项目配置和项目app启动类。
  • 如果觉得文章对你有用处,记得 点赞 收藏 转发 一波哦~

💬 往期优质文章分享

  • C++ QT结合FFmpeg实战开发视频播放器-01环境的安装和项目部署
  • 解决QT问题:运行qmake:Project ERROR: Cannot run compiler ‘cl‘. Output:
  • 解决安装QT后MSVC2015 64bit配置无编译器和调试器问题
  • Qt中的套件提示no complier set in kit和no debugger,出现黄色感叹号问题解决(MSVC2017)
  • Python+selenium 自动化 - 实现自动导入、上传外部文件(不弹出windows窗口)

🚀 优质教程分享 🚀

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

🚀 资料白嫖,温馨提示 🚀

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

请添加图片描述

http://www.xdnf.cn/news/11170.html

相关文章:

  • 当你在浏览器输入www.xxx.com的时候会发生什么?
  • linux 防火墙firewall详解
  • MSDE2000安装
  • 信息论:熵与互信息
  • 分享一个简洁、优雅且高效的 Hugo 博客主题 - FixIt
  • CSS基础学习--9 边框(Border)
  • Oracle数据库入门教程(作者原创)
  • Linux内核(十)WIFI BT电路解析 对应设备树配置解析
  • Ubuntu安装eclipse
  • 补丁(patch)的制作与应用
  • 什么是原码、反码和补码
  • reviewboard环境搭建(3):创建站点
  • 姓氏的来历
  • 位图是什么
  • PDF 解锁(unlock)
  • Zblog模板:三栏自适应网赚博客主题模板
  • ActivityThread分析—ActivityThread的main方法的执行流程分析
  • Flask——request的form_data_args用法
  • 汇编语言入门教程
  • HttpWatch使用教程
  • 万用表之电压测量原理(基于ICL7107)
  • 多点定位MLAT系统解决方案
  • static 函数和普通函数
  • 归并排序(Merge Sort)
  • C++ assert.h头文件
  • H264解码之TS流解析
  • VRML基础知识
  • SCJP 学习笔记
  • 数字货币/币币交易所系统开发|案例介绍|APP开发|项目测试
  • 图片Base64编码