Qt版音乐播放器

    Qt版音乐播放器

转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907

一、关于Qt

1.1 什么是Qt

Qt是一个跨平台应用程序和UI开发框架。使用Qt只需一次性开发应用程序,无需重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。

Qt Creator是全新的跨平台Qt IDE,可单独使用,也可与Qt库和开发工具组成一套完整的SDK,其中包括:高级C++代码编辑器,项目和集成管理工具,集成的上下文相关的帮助系统,图形化调试器,代码管理和浏览工具。

1.2 Qt的特点

    1)直观的C++类库:模块化Qt C++类库提供一套丰富的应用程序生成块,包含了构件高级跨平台应用程序所需的           全部功能。具有直观、易学、易用,生成好理解、易维护的代码等特点。

    2)跨桌面和嵌入式操作系统的移植性:使用Qt,您只需一次性开发应用程序,就可跨不同桌面和嵌入式操作系             统进行部署,而无须重新写代码,可以说Qt无处不在。

    3)使用单一的源代码定位多个操作系统。

    4)无须考虑平台,可重新分配开发资源。

    5)代码不受担忧平台更改影响的长远考虑。

6)具有跨平台IDE的集成开发工具:Qt Creator是专门为满足Qt开发人员需求而量身定制的跨平台集成开发环境         (IDE)。Qt Creator可在Windows、Linux/X11和Mac OS X桌面操作系统上运行,公开发人员针对多个桌面和移           动平台设备创建应用程序。

1.3    Qt Creator的功能和特性

1)复杂代码编辑器:Qt Creator的高级代码编辑器支持C++和QML(JavaScript)、上下文相关帮助、代码完成功        能、本机代码转化及其功能。

2)版本控制:支持包括Git、Subversion、CVS等版本控制。

3)集成用户界面设计器:Qt Creator提供了两个集成的可视化编辑器:用于通过QWidget生成界面的Qt Designer,      以及用于通过QML语言开发动态界面的Qt Quick Designer

4)项目和编译管理:无论是导入原有项目还是新建全新的项目,Qt Creator都能生成必要的文件。包括对Cross-            qmake和Cmake的支持。

5) 桌面和移动平台:支持在桌面和移动设备中编译和运行Qt程序。

6)Qt 模拟器:Qt模拟器是诺基亚Qt SDK的一部分。

二 、窗口部件

2.1  基础窗口部件QWidget

QWidget类是所有用户界面对象的基类,被称为基础窗口部件。QWidget继承自QObject类和QPaintDevice类,其中QObject类是所有支持Qt对象模型的基类,QPaintDevice类是所有可以绘制的对象的基类。

2.2  对话框QDialog

对话框分为模态对话框和非模态对话框。

模态对话框是:在该对话框没有关闭之前,不能与其他应用程序的其他窗口进行交互。常见的模态对话框是提示对话框和警告对话框等。

非模态对话框:与模态对话框相反,在其关闭之前,可以与其他应用程序的其他窗口进行交互。

2.2.1 认识信号和槽

在Qt中使用信号和槽机制来完成对象之间的协同操作,简单来说,信号和槽都是函数,比如单击窗口上的一个按钮想要弹出一个对话框,那么就可以将这个按钮的单击信号和定义的槽关联起来,在这个槽中可以创建一个对话框并显示。这样单击这个按钮机会发射信号,进而执行槽来显示一个对话框。

2.2.2 标准对话框

常用的标准对话框有:颜色对话框、文件对话框、字体对话框、输入对话框、消息对话框、进度对话框、错误信息对话框、向导对话框。

2.3 其他窗口部件

2.3.1 QFrame类

QFame类是带有边框的部件的基类,它的子类有最为常见的标签部件QLabel、QLCDNumber、QSplitter、QStackedWidget、QToolBox和QAbstractScrollArea类。

2.3.2 按钮部件

    QAbstractButton类是按钮部件的抽象类,提供了按钮的通用功能。它的子类包括复选框QCheckBox、标准按钮QPushButton、单选按钮QRadioButton和工具按钮QToolButton.

2.3.3 行编辑器

    行编辑器QLineEdit部件是一个单行的文本编辑器,允许用户输入和编辑单行的纯文本内容,而且提供了一系列有用的功能,包括撤销和恢复、剪切和拖放等操作。

2.3.4 数值设定框

    QAbstractSpinBox类是一个抽象类,提供了一个数值设定框和一个行编辑器来显示设定值。它有三个子类QDateTimeEdit、QSpinBox和QDoubleSpinBox分别用来完成日期时间、整数和浮点数的设定。

2.3.5 滑块部件

    QAbstractSlider类提供了一个区间内的整数值,有一个滑块,可以定位到一个整数区间的任意值。这个类是一个抽象类,有3个子类QScrollBar、QSlider和QDial。其中滚动条QScrollBar更多的用在QScrollArea类中来实现滚动区域;而QSlider是最常见的音量控制或多媒体播放进度等滑块;QDial是一个刻度表盘。

三、布局管理

3.1  布局管理系统

Qt的布局管理系统提供了简单而强大的机制来自动排列一个窗口中的部件,确保他们有效的使用空间。Qt包含了一组布局管理类来描述怎样在应用程序的用户界面中对部件进行布局。比如QLayout的几个子类,这里将他们称作布局管理器。所有的QWidget类的子类的实例或对象都可以使用布局管理器来管理位于其中的子部件,QWidget::setLayout()函数可以在一个部件上应用布局管理器。一旦一个部件上设置了布局管理器,那么它会完成一下几种操作:

*定位子部件

*感知窗口默认大小

*感知窗口最小大小

*改变大小处理

*当内容改变时自动更新

布局管理器有:

1)基本布局管理器(QBoxLayout)

2)栅格布局管理器(QGridLayout)

3) 表单布局管理器 (QFormLayout)

分裂器QSlider是一个很实用的东西,他提供了布局管理器的分裂功能,可以将一个部件均匀分裂。

3.2  设置伙伴关系

将一个标签和一个输入框设置为伙伴关系,就可以使得两者为伙伴关系。

3.3  设置Tab键顺序

使用setTabOrder()函数来设置Tab键的顺序。

四、应用程序主窗口

4.1  主窗口框架

主窗口为建立应用程序用户界面提供了一个框架,Qt提供了QMainWindow和其他一些相关的类共同组成主窗口。QMainWindow类拥有自己的布局。它包含一下部件:

1)菜单栏:菜单包含了一个下拉菜单项的列表,这些菜单项由QAction动作类实现。菜单位于主窗口的顶部,一个主窗口只能有一个菜单栏。

2)工具栏:工具栏一般用于显示一些常用的菜单项目,也可以插入其他窗口部件,而且工具栏是可以移动的。一个窗口可以控制多个工具栏。

3)中心部件:在窗口的中心区域可以放入一个窗口部件作为中心部件,是应用程序主要功能实现区。一个主窗口只能有一个中心部件。

4)Dock部件:Dock部件常被称为停靠窗口,因为可以停靠在中心部件的四周。它用来放置一些部件来实现一些功能,就像一个工具箱。一个主窗口可以拥有多个Dock部件。

5)状态栏:状态栏用于显示一些程序的状态信息,在主窗口的最底部。一个主窗口只能有一个状态栏。

4.2  富文本处理

富文本(Rich Text)就是在文档中可以使用多种格式,比如字体颜色、图片和表格等。它是与纯文本(Plain Text)相对而言的。比如Windows上的记事本就是纯文本编辑器,而Word就是富文本编辑器。Qt提供了对富文本处理的支持,可以子啊帮助中查看Rich Text Processsing 关键字。

富文本文档的结构:

QTextEdit: A.QtextCursor检索QTextFrameFormat、QTextBlockFormat、QTextTable、QTextListFormat

B.QTextDocument 检索QTextFrame、QTextBlock、QTextTable、QTextList

4.3  拖放操作

对于一个应用程序,不仅希望能从文件菜单中打开一个文件,更希望可以通过拖动直接将桌面上的文件拖入程序界面上来打开,就像可以将.pro文件拖入Qt Creator中来打开整个项目一样。Qt中提供了强大的拖放操作,可以在帮助中查看Drag and Drop关键字来了解。拖放操作分为拖动(Drag)和(Drop)两种操作。当数据拖动时会被存储为MIME类型,在Qt 中使用QMimeData类来表示MIME类型的数据,并使用QDrag类来完成数据的转移,而整个拖放操作都定义咋I几个鼠标事件和拖放事件中完成的。

五、事件系统

5.1  Qt中的事件

事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。在Qt中使用一个对象来表示一个事件,继承自QEvent类。需要说明的是,事件与信号并不相同,比如单击一个界面上的按钮,那么就会产生鼠标事件QMouseEvent(不是按钮产生的),而是因为按钮被按下了,所以它会发出clicked()单击信号。这里只关心按钮的单击信号,而不用考虑鼠标事件,但是如果要设计一个按钮,或者当单击按钮时让他产生别的效果,那么就要关心鼠标事件了。

在QCoreApplication类的notify()函数的帮助文档中给出了5种处理事件的方法:

方法一:重新实现部件的paintEvent()、mousePressEvent()等事件处理函数。这是最常用的一种方法,不过他只能用来处理特定部件的特定事件。

方法二:重新实现notify()函数。这个函数功能强大,提供了完全的控制,可以在事件过滤器得到事件之前就获得它们。但是,它一次只能处理一个事件。

方法三:重新实现event()函数。QObject类的event()函数可以在事件到达默认事件处理函数之前获得该事件。

方法四:项QApplication对象上安装事件过滤器。因为一个程序只有一个QApplication对象,所以这样实现的功能与使用Notify()函数是相同的,优点是可以同时处理多个事件。

方法五:在对象上安装事件过滤器。使用事件过滤器可以在一个界面类中同时处理不同子部件的不同事件。

5.2  鼠标事件和滚轮事件

QMouseEvent类用来表示一个鼠标事件,当在窗口部件中按下鼠标或者移动鼠标指针时,都会产生鼠标事件。利用     QMouseEvent类可以获知鼠标是哪个键按下了、鼠标指针当前的位置等信息。通常是重新定义部件的鼠标事件处理函数来进行一些自定义的操作。

QWheelEvent类用来表示鼠标滚轮事件,在这个类中主要是获取滚轮移动的方向和距离。以此来进行相应的操作。

5.3  键盘事件

QKeyEvent来用来描述一个键盘事件。当键盘按下或者被释放时,键盘事件便会被送给拥有键盘输入焦点的部件。     QKeyEvent的key()函数可以获取具体的按键,对于Qt中给定的所有按键,可以在帮助中查看Qt::Key关键字。需 要特别说明的是,回车键在这里是Qt::Key_Return;键盘上的一些修饰键不如Ctrl和Shift键等,这里需要使用      QKeyEvent的modifiers()函数来获取。

5.4  定时器事件和随机数

QTimerEvent类用来描述一个定时事件。对于一个QObject的子类,只需要使用int QObject::startTimer(intinterval)函数来开启一个定时器,这个函数需要输入以毫秒为单位的整数作为参数来表明设定的时间,他返回一个整型编号来代表这个定时器。当定时器溢出时就可以在timerEvent()函数中获取改定时器的编号来进行相关的操作。

关于随机数,在Qt中使用qrand()汉qsrand()两个函数来实现的。

5.5  事件过滤器和事件的发送

Qt提供了事件过滤器来在一个部件中监控其他多个部件的事件。事件过滤器与其他部件不同,它不是一个类,只是由两个函数组成的一种操作,用来完成一个部件对其他部件的事件监视。这两个函数分别是installEventFilter()和eventFilter(),部件是QObject类中的函数。

六、界面外观

6.1  Qt风格

Qt中的各种风格是一组继承自QStyle的类。QStyle类是一个抽象基类,分装了一个GUI的外观,Qt的内建(built-in)部件使用它来执行几乎所有的绘制工作,以确保它们看起来可以像各个平台上的本地部件一样。一些风格已经内置在Qt中了。

Qt提供的风格有:

  1)QCDEStyle: CDE风格

2)QCleanlooksStyle:类似于GNOME的Clearlook风格

 3)QMacStyle: Mac OS风格

 4)QMotifStyle: Motif风格

 5)QWindowsStyle: 微软Windows风格

6.2 Qt样式表

Qt样式表是一个可以自定义部件外观的十分强大的机制。Qt样式表的概念、术语和语法都受到了HTML的层叠样式表(CSS)的启发,不过与CSS不同的是,Qt样式表应用与部件的世界。

6.3  特殊效果窗体

可以实现不规则窗体、透明窗体等特殊效果的窗体,可以使得应用程序的外观更加个性化,更具吸引力。

转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907

七、音乐播放器实例

7.1  功能需求

1) 导入音乐文件和文件夹

2) 播放、暂停、上一曲、下一曲及停止等功能

3) 播放列表的显示及歌词显示

4) 声音大小及进度的控制

5) 频谱的显示

6) 漂亮的界面设计

7.2  总体设计

1) 界面设计:

主要是播放列表、频谱显示、播放、暂停等按钮的设计,界面的设计我花了很多功夫,能够设计出优美的界面,也得益于Qt的设计师,使用类似CSS的方式进行界面的设计,使得界面能够轻松改变。

2) 导入音乐文件、播放、暂停等功能设计:

导入文件使用文件对话框,播放、暂停直接使用QMediaPlayer类的函数控制,导入文件夹是一个难点,主要是在扫描文件夹下所有的文件,提取出.mp3类型的文件,然后加入到QMediaPlaylist列表类中即可,然后将其播放路径写入文件,之后读入播放列表并显示。

3) 歌词播放类的设计:

将歌词播放窗体及播放功能单独设计。

4) 频谱显示:

频谱显示的具体类也是单独设计,显示时在主窗体中显示。

7.3  技术难点

音乐播放器的技术难点是歌词播放及频谱的显示。首先,歌词播放的总体思想是获得当前音乐播放的时间进度,然后与歌词文件的时间点进行比较,如果到了该时间点,就播放其后的歌词,获取的是该时间点与下一句歌词的时间差,均匀播放即可,其次是频谱的显示,这个相对较难,我参考了Qt中自带的示例程序,其是将音乐文件进行傅里叶变换,之后获取不同频率波段的值,最后动态显示。我使用的播放音乐的是QMediaPlayer类和QMeidaPlaylist类,没有用Phonon框架,因为Qt5.0以后不再使用该多媒体框架。

7.4  测试实现

转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907

时间: 2024-10-12 04:29:42

Qt版音乐播放器的相关文章

新手作品~~~简单版音乐播放器

为了完成别人交给的小任务,作为一个新手看了很多的视频教程,实在是难死宝宝了,好在终于找到一篇合适我的布局的关于音乐播放器布局的文章,所以用了两天,就照猫画虎的学了下来,为了完全适配我的布局文件,删删减减,查了很多资料....才算是搞出个基本样子,废话不多说,直接上代码和效果图,新人作品,不喜勿喷. 功能很简单: 1.扫描sd卡内的音乐文件,将扫描到的音乐文件加载到音乐列表中. 2.点击音乐列表,实现播放音乐的功能 3.点击播放控制按钮(播放/暂停 上/下一曲)实现相关功能 首先是三个Java文件

android版音乐播放器----卡拉OK歌词实现(二)

相信大家都看过酷狗的音乐播放器,特别是酷狗的滚动歌词实现起来,效果特别好.我自己也尝试看了一下酷狗的歌词文件,发现是加密的,根本就看不了,所以只能是从目前开源的歌词文件出发了.我自己选择的是ksc歌词文件. 要实现歌词的功能,那首先就是要先认识一下ksc歌词的文件与普通的lrc歌词有那方面的区别? 当然,这里我从网上找了一个文档,看了文档里面的介绍,大家大概就会明白两都的区别. http://wenku.baidu.com/link?url=Ga4ESBrytlx3qUoxX5ApHbFIZro

android版音乐播放器----卡拉OK歌词实现(一)

我们都看过酷狗的滚动歌词,当然,我们要实现他的话,第一步,就是弄出类似的歌词效果. 大家可以参考一下,下面我提供的链接的视频,里面提到了,歌词实现的大概原理. http://www.duobei.com/room/trial/5873886122 知道它的实现原理后,我们就可以从歌词入手了.

模仿天天动听5可联网下载歌词的音乐播放器

模仿天天动听5可联网下载歌词的音乐播放器 这是一个高仿天天动听5的android版音乐播放器,界面华丽功能完整,除了本地播放器应有的那些功能另外还添加了程序内直接在线匹配下载歌词(联网可用,数据源来自百度音乐盒).皮肤背景更换.摇一摇换歌等功能,本源码是一个综合型的项目,涉及到slidemenu.pinyin4j.lrc.service.fragment.aidl.sqlite等知识,项目有比较完整的注释项目没有广告质量较高. 下载地址:http://www.devstore.cn/code/i

Qt音乐播放器制作(三)Easy Player

今天发布了EasyPlayer的第一个版本,有兴趣的朋友可以到这里下载:基于Qt的在线音乐播放器EasyPlayer v1.0. 相对于上一篇文章,主要做了以下修改,还是先放图吧: 如图所示,爱折腾的博主又修改了界面. 最明显的变化在于去除了窗口边框,实现了自定义的最小化按钮和关闭按钮来操控窗体的相应动作. 然后,就是讲搜索列表和播放列表调换了位置,这么说来,搜索列表的右边按键要换了,改成"+"比较适合点. 最后,就是你们看到的,歌词显示界面了.第一个版本实现了歌词的同步搜索和显示,但

Qt音乐播放器制作(一)Easy Player

前几天忽然间觉得,事到如今Qt的功底也有些基础了,为什么不试着自己做个玩意来玩玩呢?刚好在开源中国逛代码区的时候看到一个QKugou的项目,就想着做一个在线音乐播放器好了.于是开始着手准备,忙活了一天,在这里做个记录. 首先,需要找到可以用的在线音乐API,试过了网友整理出来的百度Mp3和Soso音乐接口,早上还可以,晚上就不行了,可能是被发现然后屏蔽了吧,毕竟人家还没开放API.网友整合出来的资源用不了,只好回到QKugou项目,从中提取API,幸好可以用,在这里特别感谢.但是QKugou并没

基于jQuery仿QQ音乐播放器网页版代码

基于jQuery仿QQ音乐播放器网页版代码是一款黑色样式风格的网页QQ音乐播放器样式代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="m_player" id="divplayer" role="application" onselectstart="return false" style="left: 0px;"> <div class=&

基于Qt Phonon模块实现音乐播放器

这次使用Qt实现的是一个本地音乐播放器,可以播放下载在计算机本地的音乐,提供了添加歌曲,歌曲列表,清空列表的功能.默认歌曲列表循环播放.音乐播放的实现主要依赖的是Qt 的多媒体框架phonon.该音乐播放器的开发环境是Qt4.8.5+Qtcreator2.8.0. 音乐播放器界面如下: 主界面 歌曲列表 一.使用Qt Phonon框架播放音乐 想要写一个音乐播放器,最基本的当然就是要知道使用这个框架来播放音乐以及一些基本的播放控制比如暂停.停止.下一首等.只有知道了这些基本的东西,后面才可以将界

用PHP+H5+Boostrap做简单的音乐播放器(进阶版)

前言:之前做了一个音乐播放器(纯前端),意外的受欢迎,然后有人建议我把后台一起做了,正好也想学习后台,所以学了两天php(不要吐槽我的速度,慢工出细活嘛~)然后在之前的基础上也又完善了一些功能,所以这个Demo比之前的可以算是进阶呢~v2.0哈哈哈~感觉截图体验很不好呢,所以在美图秀秀上面做了简易的动图,大家感受感受 正文: 老规矩,先上图~感觉有点卡,愿意等的就等等嘛,不愿意等的,往下看,有图片讲解 功能实现: 1.点击音乐列表播放音乐 2.拖动或点击进度条,调节音乐播放进度 3.浮动到音量控