热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Qt音乐播放器 2.0版全新升级

本次发布的Qt音乐播放器2.0版本在用户界面方面进行了细致优化,提升了整体的视觉效果和用户体验。尽管核心功能与1.0版本保持一致,但界面的改进使得操作更加直观便捷,为用户带来了更为流畅的使用体验。此外,我们还对部分细节进行了微调,以确保软件的稳定性和性能得到进一步提升。

  呃……反正这篇博客我是本不打算写的,这次的音乐播放器没什么大的变化,主要是在界面上稍微做了些改进,代码是照搬v1.0的,不过这次加了换肤(这个是班门弄斧了些哈),不过话说回来,也是自己辛辛苦苦自己组装的音乐播放器吧,没有窃取别人家的劳动成果,我感觉这个还算的上是一个让我欣慰的原因,一向是剃头挑子-一头热的我,不知道这次能坚持多久,只能说声走一步算一步了。甭废话了,放代码:


widget.h


#include"widget.h"

#include"ui_widget.h"

#include

Widget::Widget(QWidget*parent):

QWidget(parent),

ui(newUi::Widget)

{

ui->setupUi(this);

player=newQMediaPlayer(this);

list=newQMediaPlaylist;

QDirdir("E:/音乐");

foreach(QFileInfoinfo,dir.entryInfoList())

{

if(info.exists())

{

list->addMedia(QUrl(info.absoluteFilePath()));

ui->show->addItem(info.fileName());

}

}

ui->V->setRange(0,100);

list->setCurrentIndex(1);

player->setPlaylist(list);

player->setVolume(50);

connect(ui->V,SIGNAL(valueChanged(int)),player,SLOT(setVolume(int)));

intwidth=this->width();

QToolButton*minButton=newQToolButton(this);

QToolButton*closeButton=newQToolButton(this);

connect(closeButton,SIGNAL(clicked(bool)),this,SLOT(on_closeButton_clicked()));

connect(minButton,SIGNAL(clicked(bool)),this,SLOT(on_minButton_clicked()));

QPixmapminPix=style()->standardPixmap(QStyle::SP_TitleBarUnshadeButton);

QPixmapclosePix=style()->standardPixmap(QStyle::SP_TitleBarCloseButton);

minButton->setIcon(minPix);

closeButton->setIcon(closePix);

minButton->setGeometry(width-46,5,20,20);

closeButton->setGeometry(width-25,5,20,20);

minButton->setToolTip(tr("换肤"));

closeButton->setToolTip(tr("关闭"));

minButton->setStyleSheet("background-color:transparent;");

closeButton->setStyleSheet("background-color:transparent;");

ui->num->setText("已找到"+QString::number(ui->show->count(),10)+"首音乐");

player->setVolume(25);

ui->V->setValue(25);

ui->V->accessibleDescription();

connect(ui->V,SIGNAL(valueChanged(int)),player,SLOT(setVolume(int)));

connect(ui->show,SIGNAL(clicked(QModelIndex)),this,SLOT(toplay(QModelIndex)));

}

Widget::~Widget()

{

deleteui;

}

voidWidget::on_Prvious_clicked()

{

list->previous();

player->play();

ui->show->autoFillBackground();

}

voidWidget::on_Play_clicked()

{

if(ui->Play->text()=="播放")

{

player->play();

ui->Play->setText("暂停");

}

else

{

player->pause();

ui->Play->setText("播放");

}

}

voidWidget::on_Next_clicked()

{

list->next();

player->play();

}

voidWidget::mousePressEvent(QMouseEvent*event)

{

if(event->button()==Qt::LeftButton)

{

mouse_press=true;

move_point=event->pos();//鼠标相对于窗体的位置(或者使用event->globalPos()-this->pos())

}

}

voidWidget::mouseMoveEvent(QMouseEvent*event)

{

if(mouse_press)//若鼠标左键被按下

{

QPointmove_pos=event->globalPos();//鼠标相对于屏幕的位置

this->move(move_pos-move_point);//移动主窗体位置

}

}

voidWidget::mouseReleaseEvent(QMouseEvent*event)

{

mouse_press=false;//设置鼠标为未被按下

}

voidWidget::on_closeButton_clicked()

{

this->close();

}

voidWidget::on_minButton_clicked()

{

staticinti=0;

i++;

QPalettep;

QPixmap*map;

switch(i%4){

case0:

map=newQPixmap(":/picture/001.jpg");

break;

case1:

map=newQPixmap(":/picture/002.jpg");

break;

case2:

map=newQPixmap(":/picture/003.jpg");

break;

case3:

map=newQPixmap(":/picture/004.jpg");

break;

default:

break;

}

p.setBrush(QPalette::Window,QBrush(*map));

this->setPalette(p);

}

voidWidget::toplay(QModelIndexx)

{

list->setCurrentIndex(x.row());

player->play();

}

main.cpp


#include"widget.h"

#include

intmain(intargc,char*argv[])

{

QApplicationa(argc,argv);

Widgetw;

w.setWindowFlags(Qt::FramelessWindowHint);

w.setWindowTitle("MusicBox");

w.setAutoFillBackground(true);

QPalettep;

QPixmappixmap("E:/照片/壁纸/002.jpg");

p.setBrush(QPalette::Window,QBrush(pixmap));

w.setPalette(p);

QPixmappixmap1(":/picture/MP3.ico");

QIconpicture(pixmap1);

w.setWindowIcon(picture);

w.show();

returna.exec();

}


widget.h


#ifndefWIDGET_H

#defineWIDGET_H

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

namespaceUi{

classWidget;

}

classWidget:publicQWidget

{

Q_OBJECT

public:

explicitWidget(QWidget*parent=0);

voidmouseReleaseEvent(QMouseEvent*event);

voidmouseMoveEvent(QMouseEvent*event);

voidmousePressEvent(QMouseEvent*event);

~Widget();

privateslots:

voidtoplay(QModelIndexx);

voidon_Prvious_clicked();

voidon_Play_clicked();

voidon_Next_clicked();

voidon_minButton_clicked();

voidon_closeButton_clicked();

private:

Ui::Widget*ui;

QMediaPlayer*player;

QMediaPlaylist*list;

QPointmove_point;//移动的距离

boolmouse_press;//鼠标按下

};

#endif//WIDGET_H



推荐阅读
  • 本文详细探讨了OpenCV中人脸检测算法的实现原理与代码结构。通过分析核心函数和关键步骤,揭示了OpenCV如何高效地进行人脸检测。文章不仅提供了代码示例,还深入解释了算法背后的数学模型和优化技巧,为开发者提供了全面的理解和实用的参考。 ... [详细]
  • 求助高手:下载的压缩包中包含CMake文件,如何在Windows环境下使用已安装的CMake GUI进行运行?
    从GitHub仓库 `https://github.com/vonmax007/RobotSimulation` 下载的代码包含多种算法,其中算法1的文件目录中包含了CMake文件。为了在Windows环境下使用已安装的CMake GUI运行这些文件,需要先确保CMake已正确安装,并按照以下步骤操作:打开CMake GUI,设置源代码路径和构建路径,点击“Configure”配置项目,然后点击“Generate”生成构建文件。最后,在生成的构建目录中使用命令行或IDE进行编译和运行。 ... [详细]
  • 计算 n 叉树中各节点子树的叶节点数量分析 ... [详细]
  • 在《PHP应用性能优化实战指南:从理论到实践的全面解析》一文中,作者分享了一次实际的PHP应用优化经验。文章回顾了先前进行的一次优化项目,指出即使系统运行时间较长后出现的各种问题和性能瓶颈,通过采用一些通用的优化策略仍然能够有效解决。文中不仅详细阐述了优化的具体步骤和方法,还结合实例分析了优化前后的性能对比,为读者提供了宝贵的参考和借鉴。 ... [详细]
  • 结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法
    结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法 ... [详细]
  • 本文详细介绍了使用响应文件在静默模式下安装和配置Oracle 11g的方法。硬件要求包括:内存至少1GB,具体可通过命令`grep -i memtotal /proc/meminfo`进行检查。此外,还提供了详细的步骤和注意事项,确保安装过程顺利进行。 ... [详细]
  • MySQL性能优化与调参指南【数据库管理】
    本文详细探讨了MySQL数据库的性能优化与参数调整技巧,旨在帮助数据库管理员和开发人员提升系统的运行效率。内容涵盖索引优化、查询优化、配置参数调整等方面,结合实际案例进行深入分析,提供实用的操作建议。此外,还介绍了常见的性能监控工具和方法,助力读者全面掌握MySQL性能优化的核心技能。 ... [详细]
  • Go语言实现Redis客户端与服务器的交互机制深入解析
    在前文对Godis v1.0版本的基础功能进行了详细介绍后,本文将重点探讨如何实现客户端与服务器之间的交互机制。通过具体代码实现,使客户端与服务器能够顺利通信,赋予项目实际运行的能力。本文将详细解析Go语言在实现这一过程中的关键技术和实现细节,帮助读者深入了解Redis客户端与服务器的交互原理。 ... [详细]
  • 本文探讨了在当前正则表达式中支持空格字符的方法。作者尝试在正则表达式中允许空白字符,但遇到了一些问题,导致该表达式无法正确识别空格。文章详细分析了问题的原因,并提出了解决方案,旨在提高正则表达式的灵活性和实用性。 ... [详细]
  • Android目录遍历工具 | AppCrawler自动化测试进阶(第二部分):个性化配置详解
    终于迎来了“足不出户也能为社会贡献力量”的时刻,但有追求的测试工程师绝不会让自己的生活变得乏味。与其在家消磨时光,不如利用这段时间深入研究和提升自己的技术能力,特别是对AppCrawler自动化测试工具的个性化配置进行详细探索。这不仅能够提高测试效率,还能为项目带来更多的价值。 ... [详细]
  • 深入解析十大经典排序算法:动画演示、原理分析与代码实现
    本文深入探讨了十种经典的排序算法,不仅通过动画直观展示了每种算法的运行过程,还详细解析了其背后的原理与机制,并提供了相应的代码实现,帮助读者全面理解和掌握这些算法的核心要点。 ... [详细]
  • 在Android平台上利用FFmpeg的Swscale组件实现YUV与RGB格式互转
    本文探讨了在Android平台上利用FFmpeg的Swscale组件实现YUV与RGB格式互转的技术细节。通过详细分析Swscale的工作原理和实际应用,展示了如何在Android环境中高效地进行图像格式转换。此外,还介绍了FFmpeg的全平台编译过程,包括x264和fdk-aac的集成,并在Ubuntu系统中配置Nginx和Nginx-RTMP-Module以支持直播推流服务。这些技术的结合为音视频处理提供了强大的支持。 ... [详细]
  • 如何判断一个度序列能否构成简单图——哈维尔-哈基米算法的应用与解析 ... [详细]
  • 使用PyQt5与OpenCV实现电脑摄像头的图像捕捉功能
    本文介绍了如何使用Python中的PyQt5和OpenCV库来实现电脑摄像头的图像捕捉功能。通过结合这两个强大的工具,用户可以轻松地打开摄像头并进行实时图像采集和处理。代码示例展示了如何初始化摄像头、捕获图像并将其显示在PyQt5的图形界面中。此外,还提供了详细的步骤说明和代码注释,帮助开发者快速上手并实现相关功能。 ... [详细]
  • 安装Qt时,Qt\Qt5.x.x文件夹下自动安装了example文件夹,其中包含了大量的示例。这里根据Examples\Qt-5.5\widgets\t ... [详细]
author-avatar
好人木庄子mzz
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有