基于Linux中Qt开发的广告机

一、实训目的

  1. 掌握Qt开发环境:通过学习和实践,学习如何搭建Qt开发环境,熟悉Qt的基本使用方法,掌握Qt的应用技术;

  2. 界面设计与框架:了解Qt的界面布局、整体设计思路以及框架解析,学会构建一个能够显示图片视频、日期时间、天气等信息的广告显示终端;

  3. 工具软件使用:了解Qt相关的工具软件;

  4. 多模块功能实现:实训内容包括图片及视频播放、日期和时间显示、天气信息处理及快进快退等功能模块的实现,全面掌握广告机系统的各个组成部分;

  5. 项目部署:将开发完成的广告机界面程序部署到实际设备上。

二、实训内容

    通过Qt实现的广告机服务器客户端程序,包括TCP通信、图片播放、日期显示、天气信息处理和滚动信息显示等功能。客户端通过TCP连接服务器,接收天气、图片等信息,并进行显示。其中主要包括以下几个方面内容:

  1. 天气信息获取:能够获取并显示当前天气信息;

  2. 日期显示功能:包括日期显示模块,用于显示当前日期;

  3. 时间显示功能:显示当前时间,支持动态更新时间;

  4. 图片播放功能:可以显示和轮播预先设定好的图片,展示广告内容,可以通过自定义控件实现;

  5. 视频播放功能:利用Qt框架集成MPlayer或其他多媒体播放器来实现视频播放功能广告机可以播放指定视频,展示广告内容;

  6. 按键功能:可实现音量大小,视频进度条以及切换视频或海报的功能。

三、实训设备要求

计算机一台,XYD的Linux广告机一台, Xshell7以及Xftp7软件。

四、实训操作步骤

1. 环境搭建:

(1)安装Linux系统,广告机通常运行在嵌入式Linux平台上;

(2)安装Qt开发环境,包括Qt Creator以及相关的依赖库;

(3)设置交叉编译器,添加一个qt的交叉编译套件,确保能够编译适用于嵌入式平台的代码。

2. 项目创建与界面设计:

(1)使用Qt创建广告机的应用界面,包括广告图片显示、视频播放、日期时间显示、天气信息显示等模块;

(2)使用Qt Creator进行界面设计,选择“新建项目”->“应用程序”,然后在弹出的对话框中选择“Qt Widgets Application”;

图1:新建工程步骤

(3)新建工程完毕后,点击Forms下的widget.ui进行广告机的界面设计,左侧添加需要用到的部件,然后进行统一布局,设置好区域,包括日期、按键等功能位置,更改文本显示框;

图2:广告机布局

(4)广告机布局好后,即可添加资源文件。在qt工程目录下新建文件夹,并把准备好的图片放进去,并统一更改好名字方便后面使用;

图3:新建文件夹存放图片

(5)将大小图以及按钮图片存放下面文件夹中,视频不用添加进去;

图4:图片存放位置

(6)右键按钮,点击改变样式表-添加资源-border-image选择图片文件夹路径即可添加图片到界面中,将所需图片全部添加到广告机布局中;

图5:添加图片

(7)编写函数实现相应功能。

2.1 天气信息的获取

  将获取到的天气信息显示在广告机界面上的相应区域。可以设置定时刷新功能,定期更新天气信息。实现天气预报功能,显示今天、明天的天气以及温度,确保天气信息获取;

图6:获取天气代码

图7:打印天气信息  

图8:按键上显示今天、明天天气代码

2.2 日期及时间显示功能

图9:时间刷新代码

右键按钮转到槽即可生成自定义函数,将格式化后的日期显示在界面上;

  

图10:日期时间显示代码

  

图11:日期时间输出结果

2.3 图片播放功能

(1)判断是否存在下一条目录

图12:判断图片目录是否存在代码

(2)实现大小图的切换功能

  

图13:实现大小图的切换代码

   使用QTimer定时器实现图片的自动切换,设置合适的间隔时间,大图切换时间设置为5秒一张,小图切换时间设置为3秒一张;

图14:定义并设置图片播放时间代码

2.4 视频播放功能

(1)判断是否存在下一条目录

  

图15:判断视频目录是否存在代码

(2)实现视频的播放功能

选择mplayer作为视频播放器,可以通过调用外部命令来启动和控制mplayer播放视频;

  

图16:实现视频播放代码

2.5 按键功能的实现

(1)实现快进快退功能

可以通过鼠标点击或拖动滑块来控制播放进度;

  

  图17:实现快进、快退功能代码

(2)实现上一首下一首功能

  通过连接按钮点击事件到相应的槽函数,实现上一首和下一首的功能。将视频文件添加到路径中,设置播放列表,确保有两个及两个以上的视频可以切换播放;

  

  图18:实现上一首、下一首播放功能代码

(3)实现播放暂停功能

  当没有按下播放暂停键时,轮播大图广告;当点击播放按钮时,调用pause()函数开始播放视;当点击暂停播放时,暂停播放视频;多次检验并调试好,确保功能正常使用;

  

图19:实现播放、暂停功能代码

(4)实现停止功能

  当点击停止按钮时,调用QMediaPlayer的stop()方法,使视频结束播放,并重置播放进度到初始状态,其次开始播放大图广告;

  

图20:实现停止功能代码

(5)实现音量控制功能

  在Qt中,可以通过QMediaPlayer类来控制音量,QMediaPlayer提供了volume属性,可以直接设置音量大小。当旋转音量按钮时,音量会改变其大小;

  图21:实现音量控制功能代码

(6)实现进度条拖动改变进度功能

  使用QSlider控件实现进度条,用户可以通过拖动进度条来控制视频的播放进度。

  

  图22:实现进度条拖动改变进度功能代码

(7)实现进度条时间显示功能

  播放过程中实时更新进度条以及播放时间,当视频未播放时,时间显示为00:00,当视频开始播放时,时间进度条随着播放进度显示当前时间进度,显示视频的总时间和当前播放进度;

  当点击暂停按钮时,视频停止播放,时间进度显示停止更新;当点击停止按钮时,视频结束播放,时间进度条清空为00:00,开始播放视频;

  图23:实现进度条显示时间功能

3. 功能实现:

实现TCP通信模块,使客户端能够通过TCP连接服务器,接收并显示天气、图片等信息。

3.1 天气信息的获取功能实现

图1:天气信息的获取

3.2 日期及时间显示功能实现

图2:日期及时间的显示

  

图3:日期及时间的打印

3.3 图片播放功能实现

  

                图4:实现图片播放功能                                 图5:实现板子上显示图片播放功能

3.4 视频播放功能实现

图6:实现视频播放功能

3.5 按键功能的实现

(1)实现快进快退功能

  

                   图7:实现视频快进功能                                        图8:实现视频快进功能

(2)实现上一首下一首功能

  

             图9:实现上一条视频播放功能                            图10:实现下一条视频播放功能

(3)实现播放暂停功能

  

                图11:实现视频播放功能                                      图12:实现视频暂停功能

(4)实现停止功能

               图13:实现视频停止功能

(5)实现音量控制功能

  

                图14:实现音量增大功能                                     图15:实现音量增大功能

(6)实现进度条时间显示功能

            图16:实现进度条时间显示功能

五、总结及心得体会

    Linux广告机界面的环境搭建是基于Qt工程,我们需要安装好软件以及对这个工程进行初步认识。对于广告机的设计,我们需要设计好界面,添加相应的部件来实现需要的功能才能达到我们需要的效果。在项目开发中,我们设计了一个多功能的广告机,该广告机可以实现海报的切换、视频的播放功能,以及快进快退,上一首下一首,天气时间的获取等基本广告机功能。此外,我们还实现了客户端与服务器之间的通信功能,使的广告机可以实时显示时间日期以及播放天气信息。对于广告机的海报我们需选定好主题,再上网查找相应图片,最后把图片加入工程即可实现相应功能。
​ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/2172.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

设计一个灵活的RPC架构

RPC架构 RPC本质上就是一个远程调用,需要通过网络来传输数据。传输协议可以有多种选择,但考虑到可靠性,一般默认采用TCP协议。为了屏蔽网络传输的复杂性,需要封装一个单独的数据传输模块用来收发二进制数据,这个单独模…

Leetcode 64. 最小路径和 动态规划+空间优化

原题链接&#xff1a;Leetcode 64. 最小路径和 二维数据 class Solution { public:int minPathSum(vector<vector<int>>& grid) {int m grid.size();int n grid[0].size();int dp[m][n];dp[0][0] grid[0][0];for (int j 1; j < n; j)dp[0][j] dp[0][…

qt QMenu详解

1、概述 QMenu是Qt框架中的一个类&#xff0c;用于创建和管理菜单。它提供了丰富的接口来添加菜单项&#xff08;通常是QAction对象&#xff09;、子菜单以及分隔符。QMenu可以嵌入到菜单栏&#xff08;QMenuBar&#xff09;中&#xff0c;也可以作为弹出菜单&#xff08;通过…

Android——Activity生命周期

Activity生命周期 onCreate&#xff1a;创建活动。把页面布局加载进内存&#xff0c;君如了初始状态。onStart&#xff1a;开始活动。把活动页面显示在屏幕上&#xff0c;进入了就绪状态。onResume&#xff1a;恢复活动。活动页面进入活跃状态&#xff0c;能够与用户正常交互&…

02- 模块化编程-004 DB18B20温度数码显示

1、DB18B20采样与显示电路 2、DB18B20简介 DS18B20是一款高精度的单总线数字温度传感器&#xff0c;适用于多种温度测量场合。 温度范围&#xff1a;-55℃至125℃精度&#xff1a;可编程设定9至12位分辨率&#xff0c;对应温度分辨率0.5℃、0.25℃、0.125℃、0.0625℃通信&am…

[241102] Fedora Linux 41 正式发布 | Wasmer 5.0 发布

目录 Fedora Linux 41 正式发布Wasmer 5.0 发布 Fedora Linux 41 正式发布 主要更新&#xff1a; DNF 5: 更快、更小、依赖更少&#xff0c;统一了容器、服务器、桌面和设备的包管理体验。桌面更新&#xff1a; Fedora Workstation 41 基于 GNOME 47&#xff0c;默认终端改为…

C++继承

文章目录 一、继承的概念和定义1、继承的概念2、继承的定义3、继承基类成员访问方式的变化 二、基类和派生类之间的转换三、继承中的作用域1、隐藏规则 四、派生类的默认成员函数1、常见默认成员函数2、实现一个不能被继承的类 五、继承与友元六、继承与静态成员变量七、多继承…

嵌入式linux系统中串口驱动框架分析

大家好,今天主要给大家分享一下,如何使用linux系统中的串口实现。 第一:串口基本简介 串口是很常见的一个外设,在Linux下通常通过串口和其他设备或传感器进行通信。根据电平的不同,串口可以分为TTL和RS232。不管是什么样的电平接口,驱动程序是一样的。 第二:Linux下UAR…

秋日盛景,北京马拉松万人齐跑,秀域人工智能理疗获好评无数

在金秋送爽的北京&#xff0c;一场全民瞩目的体育盛事——北京马拉松顺利开跑&#xff0c;再次点燃了这座城市的运动激情。各地跑者齐聚双奥之城&#xff0c;共同奔赴在秋日美景之中。      回首往昔&#xff0c;1981年9月27日&#xff0c;首届北京马拉松赛的举办&#xff…

Java-I/O框架09:InputStreamReader、OutputStreamWriter使用

视频链接&#xff1a;16.24 转换流的使用_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Tz4y1X7H7?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p24 1.InputStreamReader使用 package com.yundait.Demo05;import java…

JavaScript语法基础(JS使用方式, 输出方式, 变量,数据类型,运算符,程序控制语句)

目录 JS概念 一.JS使用方式 &#xff08;1&#xff09;行内式 &#xff08;2&#xff09;内嵌式 &#xff08;3&#xff09;外链式 二.JS输出方式 三.基本语法 1.变量 &#xff08;1&#xff09;变量的命名 &#xff08;2&#xff09;变量的声明 &#xff08;3&#xf…

NPOI 操作详解(操作Excel)

目录 1. 安装 NPOI 2. 使用 NPOI 创建新 Excel 文件 3. 设置列宽和行高 1. 设置列宽 2. 设置行高 3. 同时设置列宽和行高 4. 设置统一的行高 5. 设置统一的列宽 6. 应用统一的行高和列宽 4. 合并单元格 5. 设置单元格样式&#xff08;字体、边框、背景色等&#xf…

codigger体验过程记录

一、codigger的介绍 codigger是一款分布式操作系统&#xff0c;主要是便于进行个人移动化办公、在线协同办公、开发和娱乐的私人应用。 收到codigger开发者朋友的邀请&#xff0c;于是进行了这款产品的升级体验&#xff0c;接下来就简单介绍一下自己的体验过程吧。 二、登录系…

使用labelme中的AI模型提升数据标注速度

1、打开labelme 2、选择AI模型 选择之后&#xff0c;会自动进行模型下载&#xff0c;推荐开梯子&#xff0c;否则可能下载失败&#xff0c;最小的EfficientSam 在30M左右 3、右键选择AI多边形&#xff08;分割&#xff09;或AI蒙版&#xff08;目标检测&#xff09;&#xf…

全双工通信协议WebSocket——使用WebSocket实现智能学习助手/聊天室功能

一.什么是WebSocket&#xff1f; WebSocket是基于TCP的一种新的网络协议。它实现了浏览器与服务器的全双工通信——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c;并进行双向数据传输 HTTP 协议是一种无状态的、无连接的、单向的应用…

音乐网站新篇章:SpringBoot Web实现

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

【初阶数据结构篇】链式结构二叉树(二叉链)的实现(感受递归暴力美学)

文章目录 须知 &#x1f4ac; 欢迎讨论&#xff1a;如果你在学习过程中有任何问题或想法&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习。你的支持是我继续创作的动力&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;觉得这篇文章对你有帮助吗&#xff1…

el-talble selection行 初始默认勾选

导言 el-talble selection 行&#xff08;选择列&#xff09;用于显示复选框&#xff0c;让用户可以选择或取消选择某些表格行&#xff0c;常用于批量操作场景。 刚刚试了下&#xff0c;想加深印象记录一下当学习碎片。参考的是表格多选并根据每行值初始化选中状态&#xff08;…

RabbitMQ交换机类型

RabbitMQ交换机类型 1、RabbitMQ工作模型2、RabbitMQ交换机类型2.1、Fanout Exchange&#xff08;扇形&#xff09;2.1.1、介绍2.1.2、示例2.1.2.1、生产者2.1.2.2、消费者2.1.2.3、测试 2.2、Direct Exchange&#xff08;直连&#xff09;2.2.1、介绍2.2.2、示例2.2.2.1、生产…

数据结构---排序(上)

一.直接插入排序 思想&#xff1a;将一个个未排序的数字插入到已经排好顺序的数组中。 例如&#xff1a; 思路&#xff1a;先将前两个数字排序&#xff0c;然后将后面数字与前面数字比较排序。 操作&#xff1a; 1.引入变量 i 遍历数组[1&#xff0c;array.lenth] 2.用临时…