当前位置:   article > 正文

IMX6ULL-QT项目之mplayer音乐播放器-交叉编译mplayer_qt mplayer

qt mplayer

在linux环境下安装mplayer后,打开ubuntu里的QT,QT安装的版本5.12.9,QT界面的图标基本都是正点原子收集的图片,实现方式参考B站里的教学

简单介绍mplayer命令:

按键操作:
    音量减小:/、9
    音量增大:*、0
    上、下键:   前进、后退1分钟,
    左键、右键:前进、后退10秒
mplayer   Music/*
    这个就是播放Music目录下的所有音乐,是按顺序播放的

命令:
 -shuffle 
    随机播放
 -playlist  list.txt
    列表顺序播放
-slave
    开启从模式后台播放
-loop N    
    重复播放N次,N=0则永远重复播放
-quiet
    指定mplayer不向屏幕上,打印乱码信息
-slave
    可以敲入指定命令后回车控制
-idle 
    播放文件至文件末尾后mplayer不退出
-softvol
    不加这个参数可能无法设置静音
mplayer * < /dev/null & 
    后台播放,可以加参数
mplayer * < /dev/null > /dev/null 2>1&
    后台播放,不可以加参数,把 mplayer *产生的所有的标准输出/输入都丢掉,
    包括标准错误输出(2>1&),这样即使出错也不会跳出任何提示,完全安静的后台运行

-input命令行模式下的://注意很重要,发送的指令结尾一定要\n结尾,不然无效
loadfile  string    //播放string指定的歌曲,string为歌曲路径+文件名(例:“loadfile  ../easylove.mp3”)。
volume  x  1 //设置音量,x为音量的大小。1-100
mute 1/0 //静音开关。1:静音;0:取消静音。
pause //暂停/取消暂停。
seek value   //快进或快至参数value指定的秒数
当value为正时,快进;当value为负时,快退。
 
get_percent_pos //获得文件的播放进度(百分比:0--100)。
get_time_pos //获得文件的当前位置,以秒为单位,精确到小数位1位。
get_file_name //获得文件的文件名。
get_time_length //获得文件的长度,以秒为单位。
get_meta_album //获得文件的 '专辑' 的元数据。
get_meta_artist //获得文件的 '艺术家' 的元数据。
get_meta_comment //获得文件的 '评论' 的元数据。
get_meta_genre //获得文件的 '流派' 的元数据。
get_meta_title //获得文件的 '标题' 的元数据。
get_meta_year //获得文件的 '年份' 的元数据。

get_percent_pos ----->回应格式:ANS_PERCENT_POSITION=52
get_time_pos---->回应格式:ANS_TIME_POSITION=124.2
get_file_name --->回应格式:ANS_FILENAME='da.mp3'
get_time_length ---->回应格式:ANS_LENGTH=221.00
get_meta_album--->回应格式:ANS_META_ALBUM=''
get_meta_artist--->回应格式:ANS_META_ARTIST=''
get_meta_comment--->回应格式:ANS_META_COMMENT=''
get_meta_genre--->回应格式:ANS_META_GENRE=''
get_meta_title--->回应格式:ANS_META_TITLE=''
get_meta_year--->回应格式:ANS_META_YEAR=''

上节已经交叉编译mplayer过了并且已经拷贝至开发板了,这里略过

QT代码:

mainwindow.h

  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3. #include <QMainWindow>
  4. #include <QPushButton>
  5. #include <QPalette>
  6. #include <QSlider>
  7. #include <QTime>
  8. #include <QTimer>
  9. #include <QListWidget>
  10. #include <QProcess>
  11. #include <QFileDialog>
  12. #include <QDebug>
  13. #include <QLabel>
  14. #include <QTextCodec>
  15. #include <QString>
  16. #include <ctime>
  17. QT_BEGIN_NAMESPACE
  18. namespace Ui { class MainWindow; }
  19. QT_END_NAMESPACE
  20. class MainWindow : public QMainWindow
  21. {
  22. Q_OBJECT
  23. public:
  24. MainWindow(QWidget *parent = nullptr);
  25. ~MainWindow();
  26. void parts_init();
  27. void QSlider_init();
  28. void QListWidget_init();
  29. void scanSong();
  30. private slots:
  31. void pause_clicked();
  32. //void exit_clicked();
  33. void prev_clicked();
  34. void next_clicked();
  35. void favorite_clicked();
  36. void listcircle_clicked();
  37. void menu_clicked();
  38. void back_message_slot();
  39. void getPosTime_timeout();
  40. void musicSlide_slot(int value);
  41. void volumeSlide_slot(int value);
  42. void volume_clicked();
  43. void volume_timeout();
  44. void addfile_clicked();
  45. void cd_timeout();
  46. void songList_itemClicked();
  47. private:
  48. Ui::MainWindow *ui;
  49. QProcess *process;
  50. QPalette Pic;
  51. QFileInfoList songFilelist;
  52. QTimer *timer_cd;
  53. QTimer *timer_getPosTime;
  54. QTimer *timer_vol;
  55. int cur_time,length_time,value;
  56. QSlider *music_Slider,*volume_Slider;//进度条
  57. QPushButton *prev_button, *pause_button, *next_button, *exit_button, *volume_button, *addfile_button,
  58. *favorite_button, *listcircle_button, *menu_button;
  59. QListWidget *songList;//播放列表
  60. QLabel *label_cd;
  61. QLabel *lable_SongTitle; //歌曲名称
  62. QLabel *lable_Songcurrent_time;//显示 当前时间
  63. QLabel *lable_SongTotal_time;//显示 总时间
  64. };
  65. #endif // MAINWINDOW_H

mainwindow.cpp

  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. int play_flag = false;
  4. int favorite_flag = false;
  5. int menu_flag = false;
  6. int circle_play = true;//false=随机播放,true=循环列表
  7. static int i =1;
  8. MainWindow::MainWindow(QWidget *parent)
  9. : QMainWindow(parent)
  10. , ui(new Ui::MainWindow)
  11. {
  12. ui->setupUi(this);
  13. this->setWindowTitle("音乐播放器");
  14. this->setFixedSize(800,500);
  15. //Pic.setBrush(QPalette::Background,QBrush(QPixmap(":/pic/musicback0.jpeg").scaled(this->size())));
  16. //this->setPalette(Pic);
  17. process = new QProcess;
  18. timer_cd = new QTimer;
  19. connect(timer_cd,&QTimer::timeout,this,&MainWindow::cd_timeout);
  20. timer_getPosTime = new QTimer;
  21. connect(timer_getPosTime,&QTimer::timeout,this,&MainWindow::getPosTime_timeout);
  22. timer_getPosTime->start(900);
  23. parts_init();
  24. QSlider_init();
  25. QListWidget_init();
  26. connect(pause_button,&QPushButton::clicked,this,&MainWindow::pause_clicked);
  27. connect(prev_button,&QPushButton::clicked,this,&MainWindow::prev_clicked);
  28. connect(next_button,&QPushButton::clicked,this,&MainWindow::next_clicked);
  29. //connect(exit_button,&QPushButton::clicked,this,&MainWindow::exit_clicked);
  30. connect(favorite_button,&QPushButton::clicked,this,&MainWindow::favorite_clicked);
  31. connect(listcircle_button,&QPushButton::clicked,this,&MainWindow::listcircle_clicked);
  32. connect(menu_button,&QPushButton::clicked,this,&MainWindow::menu_clicked);
  33. connect(songList,&QListWidget::doubleClicked,this,&MainWindow::songList_itemClicked);
  34. connect(process,&QProcess::readyReadStandardOutput,this,&MainWindow::back_message_slot);
  35. //connect(music_Slider,&QSlider::sliderMoved,this,&MainWindow::musicSlide_slot);
  36. connect(volume_Slider,&QSlider::valueChanged,this,&MainWindow::volumeSlide_slot);
  37. connect(volume_button,&QPushButton::clicked,this,&MainWindow::volume_clicked);
  38. connect(timer_vol,&QTimer::timeout,this,&MainWindow::volume_timeout);
  39. connect(addfile_button,&QPushButton::clicked,this,&MainWindow::addfile_clicked);
  40. }
  41. MainWindow::~MainWindow()
  42. {
  43. delete process;
  44. delete ui;
  45. }
  46. void MainWindow::parts_init()
  47. {
  48. QFont font;
  49. label_cd = new QLabel(this);
  50. label_cd->setGeometry(390,30,300,300);
  51. label_cd->setStyleSheet("border-image: url(:/images/cd.png);");
  52. lable_SongTitle = new QLabel(this);
  53. lable_SongTitle->setGeometry(310,360,350,25);
  54. font.setPointSize(12);
  55. lable_SongTitle->setFont(font);
  56. lable_SongTitle->setStyleSheet("QLabel{color:white;}QLabel{background:transparent}");
  57. lable_SongTitle->setText("音乐PLAY");
  58. lable_SongTitle->setAlignment(Qt::AlignVCenter|Qt::AlignLeft);
  59. lable_Songcurrent_time = new QLabel(this);;
  60. lable_Songcurrent_time->setGeometry(650,365,60,20);
  61. font.setPointSize(10);
  62. lable_Songcurrent_time->setFont(font);
  63. lable_Songcurrent_time->setStyleSheet("QLabel{color:white;}QLabel{background:transparent}");
  64. lable_Songcurrent_time->setText("00:00 / ");
  65. lable_Songcurrent_time->setAlignment(Qt::AlignVCenter|Qt::AlignLeft);
  66. lable_SongTotal_time = new QLabel(this);
  67. lable_SongTotal_time->setGeometry(700,365,60,20);
  68. font.setPointSize(10);
  69. lable_SongTotal_time->setFont(font);
  70. lable_SongTotal_time->setStyleSheet("QLabel{color:white;}QLabel{background:transparent}");
  71. lable_SongTotal_time->setText("00:00");
  72. lable_SongTotal_time->setAlignment(Qt::AlignVCenter|Qt::AlignLeft);
  73. prev_button = new QPushButton;
  74. prev_button->setFixedSize(75,75);//防止它变大或者变小
  75. prev_button->setStyleSheet("border-image: url(:/images/btn_previous.png);");
  76. prev_button->setIconSize(QSize(75,75));//设置图标大小
  77. prev_button->setFlat(true);
  78. prev_button->setFocusPolicy(Qt::NoFocus);//去除虚线边框
  79. prev_button->setParent(this);//按钮一定要设置父窗口,不然显示不出
  80. prev_button->move(20,400);
  81. pause_button = new QPushButton;
  82. pause_button->setFixedSize(75,75);//防止它变大或者变小
  83. //pause_button->setIcon(QIcon(":/images/btn_play.png"));//这种点击效果不好看
  84. pause_button->setStyleSheet("border-image: url(:/images/btn_play.png);");
  85. pause_button->setIconSize(QSize(75,75));//设置图标大小
  86. pause_button->setFlat(true);
  87. pause_button->setFocusPolicy(Qt::NoFocus);//去除虚线边框
  88. pause_button->setParent(this);
  89. pause_button->move(100,400);
  90. next_button = new QPushButton;
  91. next_button->setFixedSize(75,75);//防止它变大或者变小
  92. next_button->setStyleSheet("border-image: url(:/images/btn_next.png);");
  93. next_button->setIconSize(QSize(75,75));//设置图标大小
  94. next_button->setFlat(true);
  95. next_button->setFocusPolicy(Qt::NoFocus);//去除虚线边框
  96. next_button->setParent(this);
  97. next_button->move(180,400);
  98. /*
  99. exit_button = new QPushButton;
  100. exit_button->setFixedSize(75,75);//防止它变大或者变小
  101. exit_button->setIcon(QIcon(":/images/btn_exit.png"));
  102. exit_button->setIconSize(QSize(75,75));//设置图标大小
  103. exit_button->setFlat(true);
  104. exit_button->setFocusPolicy(Qt::NoFocus);//去除虚线边框
  105. exit_button->setParent(this);
  106. exit_button->move(760,450);
  107. */
  108. addfile_button = new QPushButton;
  109. addfile_button->setFixedSize(43,43);//防止它变大或者变小
  110. addfile_button->setStyleSheet("border-image: url(:/images/openfile.png);");
  111. addfile_button->setIconSize(QSize(43,43));//设置图标大小
  112. addfile_button->setFlat(true);
  113. addfile_button->setFocusPolicy(Qt::NoFocus);//去除虚线边框
  114. addfile_button->setParent(this);
  115. addfile_button->move(200,0);
  116. addfile_button->setVisible(false);
  117. favorite_button = new QPushButton;
  118. favorite_button->setFixedSize(25,25);//防止它变大或者变小
  119. favorite_button->setIcon(QIcon(":/images/btn_favorite_no.png"));
  120. favorite_button->setIconSize(QSize(25,25));//设置图标大小
  121. favorite_button->setFlat(true);
  122. favorite_button->setFocusPolicy(Qt::NoFocus);//去除虚线边框
  123. favorite_button->setParent(this);
  124. favorite_button->move(310,430);
  125. listcircle_button = new QPushButton;
  126. listcircle_button->setFixedSize(25,25);//防止它变大或者变小
  127. listcircle_button->setIcon(QIcon(":/images/btn_listcircle.png"));
  128. listcircle_button->setIconSize(QSize(25,25));//设置图标大小
  129. listcircle_button->setFlat(true);
  130. listcircle_button->setFocusPolicy(Qt::NoFocus);//去除虚线边框
  131. listcircle_button->setParent(this);
  132. listcircle_button->move(388,430);
  133. menu_button = new QPushButton;
  134. menu_button->setFixedSize(25,25);//防止它变大或者变小
  135. menu_button->setIcon(QIcon(":/images/btn_menu1.png"));
  136. menu_button->setIconSize(QSize(25,25));//设置图标大小
  137. menu_button->setFlat(true);
  138. menu_button->setFocusPolicy(Qt::NoFocus);//去除虚线边框
  139. menu_button->setParent(this);
  140. menu_button->move(466,430);
  141. timer_vol = new QTimer(this);//音量显示定时器
  142. volume_button = new QPushButton;
  143. volume_button->setFixedSize(25,25);//防止它变大或者变小
  144. volume_button->setIcon(QIcon(":/images/btn_volume.png"));
  145. volume_button->setIconSize(QSize(25,25));//设置图标大小
  146. volume_button->setFlat(true);
  147. volume_button->setFocusPolicy(Qt::NoFocus);//去除虚线边框
  148. volume_button->setParent(this);
  149. volume_button->move(544,430);
  150. songList = new QListWidget(this);
  151. songList->clear(); //清空列表
  152. songList->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); //关闭水平滚动条
  153. songList->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); //关闭垂直滚动条
  154. songList->setFrameShape(QFrame::NoFrame); //去除边框
  155. songList->setGeometry(0,35,230,370);//设置歌曲列表位置与大小
  156. songList->setVisible(false);
  157. }
  158. void MainWindow::QSlider_init()
  159. {
  160. //播放进度滑块
  161. music_Slider = new QSlider(Qt::Horizontal, this); //设置为水平滑动条
  162. music_Slider->setGeometry(310,385,450,40); //设置位置和大小
  163. music_Slider->setRange(0,100);
  164. music_Slider->setValue(0);
  165. music_Slider->setTracking(false); 禁用追踪
  166. music_Slider->setStyleSheet( //设置滑块样式,如果写到qss样式文件里是不可以注释的
  167. //滑条
  168. "QSlider::groove:horizontal{"
  169. " border: 1px solid #999999;"
  170. " height: 5px; "
  171. "position: absolute;"
  172. "border-radius :3px;"
  173. " background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #B1B1B1, stop:1 #c4c4c4);"
  174. " margin: 1px 0;"
  175. " left: 3px; right: 3px;"
  176. "}"
  177. //小滑块
  178. "QSlider::handle:horizontal {"
  179. " background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #b4b4b4, stop:1 #8f8f8f);"
  180. "border: 1px solid #5c5c5c;"
  181. "width: 12px;"
  182. " height: 12px; "
  183. "margin: -2px -1; "
  184. " border-radius: 4px;"
  185. "}"
  186. //滑块滑过改变样式
  187. " QSlider::add-page:horizontal {"
  188. "border-radius :2px;"
  189. " margin: 1px 1;"
  190. "background: white;"
  191. "}"
  192. "QSlider::sub-page:horizontal {"
  193. "border-radius :2px;"
  194. " margin: 1px 1;"
  195. " background-color:#86dfc6;"
  196. "}"
  197. );
  198. connect(music_Slider,&QSlider::sliderMoved,[=](int value){
  199. //pause_button->setIcon(QIcon(":/images/btn_pause.png"));//不知道为啥,这里如果设置的话界面会卡住,暂且先留不设置
  200. QString msg = "seek "+QString::number(value)+" 1\n";
  201. QByteArray ba = msg.toLatin1();
  202. process->write(ba.data());
  203. });
  204. //音量滑块设置
  205. volume_Slider = new QSlider(Qt::Horizontal, this); //设置为水平滑动条
  206. volume_Slider->setGeometry(575,433,180,20); //设置位置和大小
  207. volume_Slider->setRange(0,100);
  208. volume_Slider->setValue(70);//没找到可以返回实时音量的指令,默认先设置为70
  209. volume_Slider->setTracking(true);
  210. volume_Slider->setVisible(false);//禁用追踪
  211. }
  212. void MainWindow::back_message_slot()
  213. {
  214. while (process->canReadLine()) {
  215. QString message(process->readLine());//也可以用readAll()函数,有点区别,但在这里没区别
  216. //qDebug()<<message;
  217. QStringList message_list = message.split("=");
  218. //QString remessage_cmd = message_list[0];//这样定义下面程序会出错,留下证据,一开始不知道
  219. //QString remessage_value = message_list[1];
  220. if(message_list[0] == "ANS_TIME_POSITION"){
  221. music_Slider->setValue(100*cur_time/length_time);
  222. cur_time = message_list[1].toDouble();
  223. QString textl = QString("%1%2:%3%4 /")
  224. .arg(cur_time/60/10).arg(cur_time/60%10)
  225. .arg(cur_time%60/10).arg(cur_time%60%10);
  226. lable_Songcurrent_time->setText(textl);
  227. QString textr = QString("%1%2:%3%4")
  228. .arg(length_time/60/10).arg(length_time/60%10)
  229. .arg(length_time%60/10).arg(length_time%60%10);
  230. lable_SongTotal_time->setText(textr);
  231. }
  232. else if (message_list[0] == "ANS_LENGTH") {
  233. length_time = message_list[1].toDouble();//返回的是秒为单位
  234. }
  235. else if (message_list[0] == "ANS_PERCENT_POSITION") { //返回当前歌曲的播放进度,单位是百分比 0-100
  236. value = message_list[1].toInt();
  237. //qDebug()<<value;
  238. music_Slider->setValue(value);
  239. if(value == 99){ //调试出有些歌不会到100,那就设置为99
  240. pause_button->setIcon(QIcon(":/pic/pause.png")); //播放完毕,设置为暂停图标
  241. next_clicked();
  242. }
  243. }
  244. }
  245. }
  246. void MainWindow::getPosTime_timeout()
  247. {
  248. if(play_flag == true){
  249. process->write("get_time_length\n");
  250. process->write("get_time_pos\n");
  251. process->write("get_percent_pos\n");
  252. }
  253. }
  254. void MainWindow::pause_clicked()
  255. {
  256. process->write("pause\n");
  257. if(play_flag == true){
  258. timer_cd->stop();
  259. pause_button->setIcon(QIcon(":/images/btn_play.png"));
  260. play_flag = false;
  261. }
  262. else if(play_flag == false){
  263. timer_cd->start();
  264. pause_button->setIcon(QIcon(":/images/btn_pause.png"));
  265. play_flag = true;
  266. }
  267. }
  268. void MainWindow::prev_clicked()
  269. {
  270. /*timer_getPosTime->stop();
  271. timer_getPosTime->start(900);
  272. music_Slider->setValue(0);*/
  273. int n;
  274. play_flag = true;
  275. pause_button->setIcon(QIcon(":/images/btn_pause.png"));
  276. if(circle_play == false){
  277. qsrand(time(NULL));
  278. n = qrand() % songList->count();
  279. }
  280. process->close();
  281. int curRow = 0;
  282. curRow = songList->currentRow();
  283. if(curRow-1 >= 0 ){
  284. songList->setCurrentRow(curRow-1);
  285. }else {
  286. songList->setCurrentRow(songList->count()-1);
  287. }
  288. curRow = songList->currentRow();
  289. if(circle_play == false){
  290. curRow = n;
  291. //qDebug()<<curRow;
  292. }
  293. //qDebug()<<songFilelist[curRow].filePath();
  294. QString cmd = QString("mplayer -quiet -slave %1").arg(songFilelist[curRow].filePath());
  295. songList->setCurrentRow(curRow);
  296. QString tmpname = songFilelist[curRow].fileName();
  297. QStringList list = tmpname.split(".");
  298. QString soundname = list[0];
  299. lable_SongTitle->setText(soundname);
  300. process->start(cmd);
  301. }
  302. void MainWindow::next_clicked()
  303. {
  304. /*timer_getPosTime->stop();
  305. timer_getPosTime->start(900);
  306. music_Slider->setValue(0);*/
  307. int n;
  308. play_flag = true;
  309. pause_button->setIcon(QIcon(":/images/btn_pause.png"));
  310. if(circle_play == false){
  311. qsrand(time(NULL));
  312. n = qrand() % songList->count();
  313. }
  314. process->close();
  315. int curRow = 0;
  316. curRow = songList->currentRow();
  317. if(curRow+1 < songList->count()){
  318. songList->setCurrentRow(curRow+1);
  319. }else {
  320. songList->setCurrentRow(0);
  321. }
  322. curRow = songList->currentRow();
  323. if(circle_play == false){
  324. curRow = n;
  325. //qDebug()<<curRow;
  326. }
  327. //qDebug()<<song_info_list[curRow].filePath();
  328. QString cmd = QString("mplayer -quiet -slave %1").arg(songFilelist[curRow].filePath());
  329. songList->setCurrentRow(curRow);
  330. QString tmpname = songFilelist[curRow].fileName();
  331. QStringList list = tmpname.split(".");
  332. QString soundname = list[0];
  333. lable_SongTitle->setText(soundname);
  334. process->start(cmd);
  335. }
  336. /*
  337. void MainWindow::exit_clicked()
  338. {
  339. process->close();
  340. exit(0);
  341. }
  342. */
  343. void MainWindow::musicSlide_slot(int value)
  344. {
  345. QString msg = "seek "+QString::number(value)+" 1\n";
  346. QByteArray ba = msg.toLatin1();
  347. process->write(ba.data());
  348. }
  349. void MainWindow::volumeSlide_slot(int value)
  350. {
  351. timer_vol->stop();
  352. QString msg = QString("volume %1 1\n").arg(value);
  353. QByteArray ba = msg.toLatin1();
  354. process->write(ba.data());
  355. timer_vol->start(5000);
  356. }
  357. void MainWindow::volume_clicked()
  358. {
  359. volume_Slider->setVisible(true);
  360. timer_vol->start(5000);//停留5
  361. }
  362. void MainWindow::volume_timeout()
  363. {
  364. timer_vol->stop();
  365. volume_Slider->setVisible(false);
  366. }
  367. void MainWindow::QListWidget_init()
  368. {
  369. scanSong();
  370. QListWidgetItem *item ;
  371. for (int i = 0; i < songFilelist.size(); ++i) {
  372. //songList->addItem(QFileInfo(List[i]).fileName());//将(歌曲)List用addItem函数加入到songList里
  373. songList->addItem(songFilelist[i].fileName());
  374. item = songList->item(i);
  375. item->setSizeHint(QSize(40,40));
  376. item->setForeground(Qt::white);
  377. item->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter);
  378. }
  379. }
  380. void MainWindow::songList_itemClicked()
  381. {
  382. play_flag = true;
  383. if(play_flag == true){
  384. pause_button->setIcon(QIcon(":/images/btn_pause.png"));
  385. timer_cd->start(1000);
  386. }
  387. process->close();
  388. int clickline = 0;
  389. clickline = songList->currentRow();
  390. //qDebug() <<clickline;
  391. QString tmpname = songFilelist[clickline].fileName();
  392. QStringList list = tmpname.split(".");
  393. QString soundname = list[0];
  394. lable_SongTitle->setText(soundname);
  395. QString path = songFilelist[clickline].filePath(); //绝对路径
  396. //qDebug() <<path;
  397. QString cmd = QString("mplayer -quiet -slave %1").arg(path);
  398. process->start(cmd);
  399. }
  400. void MainWindow::scanSong()
  401. {
  402. QDir dir("/home/jdr/mp3");//指定需要扫描歌曲目录的路径
  403. if (dir.exists()) {
  404. QStringList filter;
  405. filter << "*.mp3"
  406. << "*.wav"; // 包含所有.mp3 .wav后缀的文件
  407. songFilelist = dir.entryInfoList(filter, QDir::Files); // 获得目录下的所有.mp3 .wav后缀的文件
  408. }
  409. }
  410. void MainWindow::addfile_clicked()
  411. {
  412. //getOpenFileNames括号里的参数分别是:指定父类、标题、默认打开后显示的目录、文件过滤器
  413. QStringList newFileList = QFileDialog::getOpenFileNames(
  414. this,
  415. "Select files to add",
  416. "/home/jdr/mp3",
  417. "Images (*.mp3 *.wav)");
  418. //将选中的文件追加
  419. for (int i=0;i<newFileList.size();++i){
  420. if(!songFilelist.contains(newFileList[i])){ //防止重复添加
  421. songFilelist.append(newFileList[i]);
  422. songList->addItem(QFileInfo(newFileList[i]).fileName());
  423. }
  424. }
  425. }
  426. void MainWindow::favorite_clicked()
  427. {
  428. if(favorite_flag == false){
  429. favorite_button->setIcon(QIcon(":/images/btn_favorite_yes.png"));
  430. favorite_flag = true;
  431. }else {
  432. favorite_button->setIcon(QIcon(":/images/btn_favorite_no.png"));
  433. favorite_flag = false;
  434. }
  435. }
  436. void MainWindow::listcircle_clicked()
  437. {
  438. if(circle_play == true){
  439. listcircle_button->setIcon(QIcon(":/images/random.png"));
  440. circle_play = false;
  441. }else {
  442. listcircle_button->setIcon(QIcon(":/images/btn_listcircle.png"));
  443. circle_play = true;
  444. }
  445. }
  446. void MainWindow::menu_clicked()
  447. {
  448. if(menu_flag == false){
  449. songList->setVisible(true);
  450. addfile_button->setVisible(true);
  451. menu_flag = true;
  452. }else {
  453. songList->setVisible(false);
  454. addfile_button->setVisible(false);
  455. menu_flag = false;
  456. }
  457. }
  458. void MainWindow::cd_timeout()
  459. {
  460. i++;
  461. if(i == 9) i=1;
  462. QString cd = QString("border-image: url(:/images/cd%1.png);").arg(i);
  463. label_cd->setStyleSheet(cd);
  464. /*
  465. * 原本想下面这方式旋转,画面会出问题,后面来研究
  466. if(i > 360){
  467. i=0;
  468. }
  469. i +=10;
  470. QMatrix matrix;
  471. matrix.rotate(i);
  472. label_cd->setPixmap(QPixmap(":/images/cd.png").transformed(matrix, Qt::SmoothTransformation));
  473. */
  474. }

main.cpp

  1. #include "mainwindow.h"
  2. #include <QApplication>
  3. int main(int argc, char *argv[])
  4. {
  5. QApplication a(argc, argv);
  6. QFile file(":/style.qss");
  7. if (file.exists() ) {
  8. /* 以只读的方式打开 */
  9. file.open(QFile::ReadOnly);
  10. /* 以字符串的方式保存读出的结果 */
  11. QString styleSheet = QLatin1String(file.readAll());
  12. /* 设置全局样式 */
  13. qApp->setStyleSheet(styleSheet);
  14. /* 关闭文件 */
  15. file.close();
  16. }
  17. MainWindow w;
  18. w.show();
  19. return a.exec();
  20. }

style.qss

  1. QWidget {
  2. background: "#25242a"
  3. }
  4. QListWidget{
  5. background-color: rgba(255, 255, 255, 10%);
  6. outline:none;border-image:transparent
  7. }
  8. QListWidget::item:selected:active{
  9. background: rgb(0, 106, 181);
  10. }
  11. QListWidget::item:hover:active{
  12. background: qlineargradient(spread:repeat, x2:0, y2:1, x2:1, y2:0, stop:0 #a1a112, stop:0.25 #a1a112, stop:0.5 #ba89dc, stop:1 #ba89dc);
  13. }

运行: 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/711361
推荐阅读
相关标签
  

闽ICP备14008679号