IMX6ULL-QT项目之mplayer音乐播放器-交叉编译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

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>
#include <QPalette>
#include <QSlider>
#include <QTime>
#include <QTimer>
#include <QListWidget>
#include <QProcess>
#include <QFileDialog>
#include <QDebug>
#include <QLabel>
#include <QTextCodec>
#include <QString>

#include <ctime>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void parts_init();
    void QSlider_init();
    void QListWidget_init();
    void scanSong();
private slots:
    void pause_clicked();
    //void exit_clicked();
    void prev_clicked();
    void next_clicked();
    void favorite_clicked();
    void listcircle_clicked();
    void menu_clicked();
    void back_message_slot();
    void getPosTime_timeout();
    void musicSlide_slot(int value);
    void volumeSlide_slot(int value);
    void volume_clicked();
    void volume_timeout();
    void addfile_clicked();
    void cd_timeout();
    void songList_itemClicked();

private:
    Ui::MainWindow *ui;
    QProcess *process;
    QPalette Pic;

    QFileInfoList songFilelist;

    QTimer *timer_cd;
    QTimer *timer_getPosTime;
    QTimer *timer_vol;

    int cur_time,length_time,value;
    QSlider *music_Slider,*volume_Slider;//进度条

    QPushButton *prev_button, *pause_button, *next_button, *exit_button, *volume_button, *addfile_button,
                *favorite_button, *listcircle_button, *menu_button;

    QListWidget *songList;//播放列表

    QLabel *label_cd;
    QLabel *lable_SongTitle; //歌曲名称

    QLabel *lable_Songcurrent_time;//显示 当前时间
    QLabel *lable_SongTotal_time;//显示 总时间
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

int play_flag = false;
int favorite_flag = false;
int menu_flag = false;
int circle_play = true;//false=随机播放,true=循环列表
static int i =1;

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("音乐播放器");
    this->setFixedSize(800,500);
    //Pic.setBrush(QPalette::Background,QBrush(QPixmap(":/pic/musicback0.jpeg").scaled(this->size())));
    //this->setPalette(Pic);

    process = new QProcess;

    timer_cd = new QTimer;
    connect(timer_cd,&QTimer::timeout,this,&MainWindow::cd_timeout);

    timer_getPosTime = new QTimer;
    connect(timer_getPosTime,&QTimer::timeout,this,&MainWindow::getPosTime_timeout);
    timer_getPosTime->start(900);


    parts_init();
    QSlider_init();
    QListWidget_init();

    connect(pause_button,&QPushButton::clicked,this,&MainWindow::pause_clicked);
    connect(prev_button,&QPushButton::clicked,this,&MainWindow::prev_clicked);
    connect(next_button,&QPushButton::clicked,this,&MainWindow::next_clicked);
    //connect(exit_button,&QPushButton::clicked,this,&MainWindow::exit_clicked);
    connect(favorite_button,&QPushButton::clicked,this,&MainWindow::favorite_clicked);
    connect(listcircle_button,&QPushButton::clicked,this,&MainWindow::listcircle_clicked);
    connect(menu_button,&QPushButton::clicked,this,&MainWindow::menu_clicked);

    connect(songList,&QListWidget::doubleClicked,this,&MainWindow::songList_itemClicked);
    connect(process,&QProcess::readyReadStandardOutput,this,&MainWindow::back_message_slot);

    //connect(music_Slider,&QSlider::sliderMoved,this,&MainWindow::musicSlide_slot);
    connect(volume_Slider,&QSlider::valueChanged,this,&MainWindow::volumeSlide_slot);
    connect(volume_button,&QPushButton::clicked,this,&MainWindow::volume_clicked);
    connect(timer_vol,&QTimer::timeout,this,&MainWindow::volume_timeout);

    connect(addfile_button,&QPushButton::clicked,this,&MainWindow::addfile_clicked);

}

MainWindow::~MainWindow()
{
    delete process;
    delete ui;
}

void MainWindow::parts_init()
{
    QFont font;

    label_cd = new QLabel(this);
    label_cd->setGeometry(390,30,300,300);
    label_cd->setStyleSheet("border-image: url(:/images/cd.png);");

    lable_SongTitle = new QLabel(this);
    lable_SongTitle->setGeometry(310,360,350,25);
    font.setPointSize(12);
    lable_SongTitle->setFont(font);
    lable_SongTitle->setStyleSheet("QLabel{color:white;}QLabel{background:transparent}");
    lable_SongTitle->setText("音乐PLAY");
    lable_SongTitle->setAlignment(Qt::AlignVCenter|Qt::AlignLeft);

    lable_Songcurrent_time = new QLabel(this);;
    lable_Songcurrent_time->setGeometry(650,365,60,20);
    font.setPointSize(10);
    lable_Songcurrent_time->setFont(font);
    lable_Songcurrent_time->setStyleSheet("QLabel{color:white;}QLabel{background:transparent}");
    lable_Songcurrent_time->setText("00:00 / ");
    lable_Songcurrent_time->setAlignment(Qt::AlignVCenter|Qt::AlignLeft);

    lable_SongTotal_time = new QLabel(this);
    lable_SongTotal_time->setGeometry(700,365,60,20);
    font.setPointSize(10);
    lable_SongTotal_time->setFont(font);
    lable_SongTotal_time->setStyleSheet("QLabel{color:white;}QLabel{background:transparent}");
    lable_SongTotal_time->setText("00:00");
    lable_SongTotal_time->setAlignment(Qt::AlignVCenter|Qt::AlignLeft);

    prev_button = new QPushButton;
    prev_button->setFixedSize(75,75);//防止它变大或者变小
    prev_button->setStyleSheet("border-image: url(:/images/btn_previous.png);");
    prev_button->setIconSize(QSize(75,75));//设置图标大小
    prev_button->setFlat(true);
    prev_button->setFocusPolicy(Qt::NoFocus);//去除虚线边框
    prev_button->setParent(this);//按钮一定要设置父窗口,不然显示不出
    prev_button->move(20,400);

    pause_button = new QPushButton;
    pause_button->setFixedSize(75,75);//防止它变大或者变小
    //pause_button->setIcon(QIcon(":/images/btn_play.png"));//这种点击效果不好看
    pause_button->setStyleSheet("border-image: url(:/images/btn_play.png);");
    pause_button->setIconSize(QSize(75,75));//设置图标大小
    pause_button->setFlat(true);
    pause_button->setFocusPolicy(Qt::NoFocus);//去除虚线边框
    pause_button->setParent(this);
    pause_button->move(100,400);


    next_button = new QPushButton;
    next_button->setFixedSize(75,75);//防止它变大或者变小
    next_button->setStyleSheet("border-image: url(:/images/btn_next.png);");
    next_button->setIconSize(QSize(75,75));//设置图标大小
    next_button->setFlat(true);
    next_button->setFocusPolicy(Qt::NoFocus);//去除虚线边框
    next_button->setParent(this);
    next_button->move(180,400);

    /*
    exit_button = new QPushButton;
    exit_button->setFixedSize(75,75);//防止它变大或者变小
    exit_button->setIcon(QIcon(":/images/btn_exit.png"));
    exit_button->setIconSize(QSize(75,75));//设置图标大小
    exit_button->setFlat(true);
    exit_button->setFocusPolicy(Qt::NoFocus);//去除虚线边框
    exit_button->setParent(this);
    exit_button->move(760,450);
    */

    addfile_button = new QPushButton;
    addfile_button->setFixedSize(43,43);//防止它变大或者变小
    addfile_button->setStyleSheet("border-image: url(:/images/openfile.png);");
    addfile_button->setIconSize(QSize(43,43));//设置图标大小
    addfile_button->setFlat(true);
    addfile_button->setFocusPolicy(Qt::NoFocus);//去除虚线边框
    addfile_button->setParent(this);
    addfile_button->move(200,0);
    addfile_button->setVisible(false);

    favorite_button = new QPushButton;
    favorite_button->setFixedSize(25,25);//防止它变大或者变小
    favorite_button->setIcon(QIcon(":/images/btn_favorite_no.png"));
    favorite_button->setIconSize(QSize(25,25));//设置图标大小
    favorite_button->setFlat(true);
    favorite_button->setFocusPolicy(Qt::NoFocus);//去除虚线边框
    favorite_button->setParent(this);
    favorite_button->move(310,430);

    listcircle_button = new QPushButton;
    listcircle_button->setFixedSize(25,25);//防止它变大或者变小
    listcircle_button->setIcon(QIcon(":/images/btn_listcircle.png"));
    listcircle_button->setIconSize(QSize(25,25));//设置图标大小
    listcircle_button->setFlat(true);
    listcircle_button->setFocusPolicy(Qt::NoFocus);//去除虚线边框
    listcircle_button->setParent(this);
    listcircle_button->move(388,430);

    menu_button = new QPushButton;
    menu_button->setFixedSize(25,25);//防止它变大或者变小
    menu_button->setIcon(QIcon(":/images/btn_menu1.png"));
    menu_button->setIconSize(QSize(25,25));//设置图标大小
    menu_button->setFlat(true);
    menu_button->setFocusPolicy(Qt::NoFocus);//去除虚线边框
    menu_button->setParent(this);
    menu_button->move(466,430);

    timer_vol = new QTimer(this);//音量显示定时器
    volume_button = new QPushButton;
    volume_button->setFixedSize(25,25);//防止它变大或者变小
    volume_button->setIcon(QIcon(":/images/btn_volume.png"));
    volume_button->setIconSize(QSize(25,25));//设置图标大小
    volume_button->setFlat(true);
    volume_button->setFocusPolicy(Qt::NoFocus);//去除虚线边框
    volume_button->setParent(this);
    volume_button->move(544,430);


    songList = new QListWidget(this);
    songList->clear();                                                  //清空列表
    songList->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);       //关闭水平滚动条
    songList->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);     //关闭垂直滚动条
    songList->setFrameShape(QFrame::NoFrame);                      //去除边框
    songList->setGeometry(0,35,230,370);//设置歌曲列表位置与大小
    songList->setVisible(false);

}

void MainWindow::QSlider_init()
{
    //播放进度滑块
    music_Slider = new QSlider(Qt::Horizontal, this);     //设置为水平滑动条
    music_Slider->setGeometry(310,385,450,40);            //设置位置和大小
    music_Slider->setRange(0,100);
    music_Slider->setValue(0);  
    music_Slider->setTracking(false);                     禁用追踪
    music_Slider->setStyleSheet(                          //设置滑块样式,如果写到qss样式文件里是不可以注释的
                    //滑条
                    "QSlider::groove:horizontal{"
                    " border: 1px solid #999999;"
                    " height: 5px; "

                    "position: absolute;"
                    "border-radius :3px;"
                    " background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #B1B1B1, stop:1 #c4c4c4);"
                    " margin: 1px 0;"
                    " left: 3px; right: 3px;"
                    "}"
                    //小滑块
                    "QSlider::handle:horizontal {"
                    " background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #b4b4b4, stop:1 #8f8f8f);"
                   "border: 1px solid #5c5c5c;"
                    "width: 12px;"
                    " height: 12px; "
                    "margin: -2px -1; "
                    "  border-radius: 4px;"
                    "}"
                    //滑块滑过改变样式
                    " QSlider::add-page:horizontal {"
                    "border-radius :2px;"
                    " margin: 1px 1;"
                    "background: white;"
                    "}"

                    "QSlider::sub-page:horizontal {"
                    "border-radius :2px;"
                    " margin: 1px 1;"
                    "  background-color:#86dfc6;"
                    "}"
                    );

    connect(music_Slider,&QSlider::sliderMoved,[=](int value){
        //pause_button->setIcon(QIcon(":/images/btn_pause.png"));//不知道为啥,这里如果设置的话界面会卡住,暂且先留不设置
        QString msg = "seek "+QString::number(value)+" 1\n";
        QByteArray ba = msg.toLatin1();
        process->write(ba.data());

    });


    //音量滑块设置
    volume_Slider = new QSlider(Qt::Horizontal, this);     //设置为水平滑动条
    volume_Slider->setGeometry(575,433,180,20);            //设置位置和大小
    volume_Slider->setRange(0,100);
    volume_Slider->setValue(70);//没找到可以返回实时音量的指令,默认先设置为70
    volume_Slider->setTracking(true);
    volume_Slider->setVisible(false);//禁用追踪

}

void MainWindow::back_message_slot()
{
    while (process->canReadLine()) {
        QString message(process->readLine());//也可以用readAll()函数,有点区别,但在这里没区别
        //qDebug()<<message;
        QStringList message_list = message.split("=");
        //QString remessage_cmd = message_list[0];//这样定义下面程序会出错,留下证据,一开始不知道
        //QString remessage_value = message_list[1];
        if(message_list[0] == "ANS_TIME_POSITION"){
            music_Slider->setValue(100*cur_time/length_time);
            cur_time = message_list[1].toDouble();
            QString textl = QString("%1%2:%3%4 /")
                    .arg(cur_time/60/10).arg(cur_time/60%10)
                    .arg(cur_time%60/10).arg(cur_time%60%10);
            lable_Songcurrent_time->setText(textl);
            QString textr = QString("%1%2:%3%4")
                    .arg(length_time/60/10).arg(length_time/60%10)
                    .arg(length_time%60/10).arg(length_time%60%10);
            lable_SongTotal_time->setText(textr);
        }
        else if (message_list[0] == "ANS_LENGTH") {
            length_time = message_list[1].toDouble();//返回的是秒为单位
        }
        else if (message_list[0] == "ANS_PERCENT_POSITION") { //返回当前歌曲的播放进度,单位是百分比 0-100
            value = message_list[1].toInt();
            //qDebug()<<value;
            music_Slider->setValue(value);
            if(value == 99){  //调试出有些歌不会到100,那就设置为99
                pause_button->setIcon(QIcon(":/pic/pause.png")); //播放完毕,设置为暂停图标
                next_clicked();
            }
        }
    }
}

void MainWindow::getPosTime_timeout()
{
    if(play_flag == true){
        process->write("get_time_length\n");
        process->write("get_time_pos\n");
        process->write("get_percent_pos\n");
    }
}

void MainWindow::pause_clicked()
{
    process->write("pause\n");
    if(play_flag == true){
        timer_cd->stop();
        pause_button->setIcon(QIcon(":/images/btn_play.png"));
        play_flag = false;
    }
    else if(play_flag == false){
        timer_cd->start();
        pause_button->setIcon(QIcon(":/images/btn_pause.png"));
        play_flag = true;
    }

}

void MainWindow::prev_clicked()
{
    /*timer_getPosTime->stop();
    timer_getPosTime->start(900);
    music_Slider->setValue(0);*/
    int n;
    play_flag = true;
    pause_button->setIcon(QIcon(":/images/btn_pause.png"));
    if(circle_play == false){
        qsrand(time(NULL));
         n = qrand() % songList->count();
    }
    process->close();
    int curRow = 0;
    curRow = songList->currentRow();
    if(curRow-1 >= 0 ){
        songList->setCurrentRow(curRow-1);
    }else {
        songList->setCurrentRow(songList->count()-1);
    }
    curRow = songList->currentRow();
    if(circle_play == false){
          curRow = n;
          //qDebug()<<curRow;
    }
    //qDebug()<<songFilelist[curRow].filePath();
    QString cmd = QString("mplayer -quiet -slave %1").arg(songFilelist[curRow].filePath());
    songList->setCurrentRow(curRow);
    QString tmpname = songFilelist[curRow].fileName();
    QStringList list = tmpname.split(".");
    QString soundname = list[0];
    lable_SongTitle->setText(soundname);
    process->start(cmd);
}

void MainWindow::next_clicked()
{
    /*timer_getPosTime->stop();
    timer_getPosTime->start(900);
    music_Slider->setValue(0);*/
    int n;
    play_flag = true;
    pause_button->setIcon(QIcon(":/images/btn_pause.png"));
    if(circle_play == false){
        qsrand(time(NULL));
         n = qrand() % songList->count();
    }
    process->close();
    int curRow = 0;
    curRow = songList->currentRow();
    if(curRow+1 < songList->count()){
        songList->setCurrentRow(curRow+1);
    }else {
        songList->setCurrentRow(0);
    }
    curRow = songList->currentRow();
    if(circle_play == false){
          curRow = n;
          //qDebug()<<curRow;
    }
    //qDebug()<<song_info_list[curRow].filePath();
    QString cmd = QString("mplayer -quiet -slave %1").arg(songFilelist[curRow].filePath());
    songList->setCurrentRow(curRow);
    QString tmpname = songFilelist[curRow].fileName();
    QStringList list = tmpname.split(".");
    QString soundname = list[0];
    lable_SongTitle->setText(soundname);
    process->start(cmd);
}
/*
void MainWindow::exit_clicked()
{
    process->close();
    exit(0);
}
*/
void MainWindow::musicSlide_slot(int value)
{
    QString msg = "seek "+QString::number(value)+" 1\n";
    QByteArray ba = msg.toLatin1();
    process->write(ba.data());
}

void MainWindow::volumeSlide_slot(int value)
{
    timer_vol->stop();
    QString msg = QString("volume %1 1\n").arg(value);
    QByteArray ba = msg.toLatin1();
    process->write(ba.data());
    timer_vol->start(5000);
}

void MainWindow::volume_clicked()
{
    volume_Slider->setVisible(true);
    timer_vol->start(5000);//停留5秒
}

void MainWindow::volume_timeout()
{
    timer_vol->stop();
    volume_Slider->setVisible(false);
}

void MainWindow::QListWidget_init()
{

    scanSong();

    QListWidgetItem *item ;
    for (int i = 0; i < songFilelist.size(); ++i) {
        //songList->addItem(QFileInfo(List[i]).fileName());//将(歌曲)List用addItem函数加入到songList里
        songList->addItem(songFilelist[i].fileName());

        item = songList->item(i);
        item->setSizeHint(QSize(40,40));
        item->setForeground(Qt::white);
        item->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter);

    }

}
void MainWindow::songList_itemClicked()
{
    play_flag = true;
    if(play_flag == true){
      pause_button->setIcon(QIcon(":/images/btn_pause.png"));
      timer_cd->start(1000);
    }
    process->close();
    int clickline = 0;
    clickline = songList->currentRow();
    //qDebug() <<clickline;
    QString tmpname = songFilelist[clickline].fileName();
    QStringList list = tmpname.split(".");
    QString soundname = list[0];
    lable_SongTitle->setText(soundname);

    QString path = songFilelist[clickline].filePath();    //绝对路径
    //qDebug() <<path;
    QString cmd = QString("mplayer -quiet -slave %1").arg(path);
    process->start(cmd);
}

void MainWindow::scanSong()
{
    QDir dir("/home/jdr/mp3");//指定需要扫描歌曲目录的路径
    if (dir.exists()) {
        QStringList filter;
        filter << "*.mp3"
               << "*.wav";                                           // 包含所有.mp3 .wav后缀的文件
        songFilelist = dir.entryInfoList(filter, QDir::Files);      // 获得目录下的所有.mp3 .wav后缀的文件
    }
}

void MainWindow::addfile_clicked()
{
    //getOpenFileNames括号里的参数分别是:指定父类、标题、默认打开后显示的目录、文件过滤器
    QStringList newFileList  = QFileDialog::getOpenFileNames(
                                         this,
                                        "Select files to add",
                                        "/home/jdr/mp3",
                                        "Images (*.mp3 *.wav)");
    //将选中的文件追加
    for (int i=0;i<newFileList.size();++i){
        if(!songFilelist.contains(newFileList[i])){                 //防止重复添加
            songFilelist.append(newFileList[i]);
            songList->addItem(QFileInfo(newFileList[i]).fileName());
        }
    }
}
void MainWindow::favorite_clicked()
{
    if(favorite_flag == false){
       favorite_button->setIcon(QIcon(":/images/btn_favorite_yes.png"));
       favorite_flag = true;
    }else {
        favorite_button->setIcon(QIcon(":/images/btn_favorite_no.png"));
        favorite_flag = false;
    }

}

void MainWindow::listcircle_clicked()
{
    if(circle_play == true){
        listcircle_button->setIcon(QIcon(":/images/random.png"));
        circle_play = false;
    }else {
        listcircle_button->setIcon(QIcon(":/images/btn_listcircle.png"));
        circle_play = true;
    }
}

void MainWindow::menu_clicked()
{
    if(menu_flag == false){
        songList->setVisible(true);
        addfile_button->setVisible(true);
        menu_flag = true;
    }else {
        songList->setVisible(false);
        addfile_button->setVisible(false);
        menu_flag = false;
    }
}
void MainWindow::cd_timeout()
{

    i++;
    if(i == 9) i=1;
    QString cd = QString("border-image: url(:/images/cd%1.png);").arg(i);
    label_cd->setStyleSheet(cd);
    /*
     * 原本想下面这方式旋转,画面会出问题,后面来研究
    if(i > 360){
        i=0;
    }
    i +=10;
    QMatrix matrix;
    matrix.rotate(i);
    label_cd->setPixmap(QPixmap(":/images/cd.png").transformed(matrix, Qt::SmoothTransformation));
    */
}

main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QFile file(":/style.qss");
    if (file.exists() ) {
     /* 以只读的方式打开 */
     file.open(QFile::ReadOnly);
    /* 以字符串的方式保存读出的结果 */
    QString styleSheet = QLatin1String(file.readAll());
     /* 设置全局样式 */
     qApp->setStyleSheet(styleSheet);
    /* 关闭文件 */
    file.close();
    }

    MainWindow w;
    w.show();
    return a.exec();
}

style.qss

QWidget {
background: "#25242a"
}

QListWidget{
    background-color: rgba(255, 255, 255, 10%);
    outline:none;border-image:transparent
}
QListWidget::item:selected:active{
    background: rgb(0, 106, 181);
}

QListWidget::item:hover:active{
    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);
}

运行: 

  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
imx6ull音乐播放器可以使用mplayer命令进行控制。根据引用\[1\]和引用\[2\]的内容,可以使用以下命令进行音乐播放控制: - 播放指定目录下的所有音乐文件,并按顺序播放:mplayer Music/* - 随机播放:mplayer -shuffle * - 列表顺序播放:mplayer -playlist list.txt - 后台播放:mplayer * < /dev/null & 或 mplayer * < /dev/null > /dev/null 2>1& 此外,还可以使用-input命令行模式下的指令进行更精细的控制,如引用\[3\]所示。例如,可以使用以下指令进行音量控制: - 设置音量:volume x(x为音量的大小,范围为1-100) - 静音开关:mute 1(静音)/ mute 0(取消静音) 还可以使用其他指令获取文件的播放进度、当前位置、文件名以及元数据等信息。例如: - 获取文件的播放进度:get_percent_pos - 获取文件的当前位置:get_time_pos - 获取文件的文件名:get_file_name - 获取文件的元数据,如专辑、艺术家、评论、流派、标题和年份等:get_meta_album、get_meta_artist、get_meta_comment、get_meta_genre、get_meta_title、get_meta_year 通过使用这些命令和指令,可以对imx6ull音乐播放器进行控制和获取相关信息。 #### 引用[.reference_title] - *1* *2* *3* [IMX6ULL-QT项目mplayer音乐播放器-交叉编译mplayer](https://blog.csdn.net/qq_40792874/article/details/120564555)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值