#include "frmmain.h" #include "ui_frmmain.h" #include "quihelper.h" #include "iconhelper.h" #include "frmstylewidget.h" frmMain::frmMain(QWidget *parent) : QDialog(parent), ui(new Ui::frmMain) { ui->setupUi(this); this->initForm(); this->changeStyle("#159C77"); } frmMain::~frmMain() { delete ui; } bool frmMain::eventFilter(QObject *watched, QEvent *event) { if (watched == ui->widgetTitle) { if (event->type() == QEvent::MouseButtonDblClick) { this->on_btnMenu_Max_clicked(); return true; } } else if (watched == ui->labVolume) { if (event->type() == QEvent::MouseButtonPress) { if (ui->labVolume->property("status").toString() == "normal") { ui->labVolume->setToolTip("恢复音量"); ui->labVolume->setProperty("status", "mute"); IconHelper::setIcon(ui->labVolume, 0xf026, 18); } else { ui->labVolume->setToolTip("静音"); ui->labVolume->setProperty("status", "normal"); IconHelper::setIcon(ui->labVolume, 0xf028, 18); } return true; } } else if (watched == ui->labMode) { if (event->type() == QEvent::MouseButtonPress) { if (ui->labMode->property("status").toString() == "list") { ui->labMode->setToolTip("单曲循环"); ui->labMode->setProperty("status", "loop"); IconHelper::setIcon(ui->labMode, 0xf021, 17); } else if (ui->labMode->property("status").toString() == "loop") { ui->labMode->setToolTip("列表循环"); ui->labMode->setProperty("status", "looplist"); IconHelper::setIcon(ui->labMode, 0xf022, 17); } else if (ui->labMode->property("status").toString() == "looplist") { ui->labMode->setToolTip("随机播放"); ui->labMode->setProperty("status", "random"); IconHelper::setIcon(ui->labMode, 0xf074, 16); } else { ui->labMode->setToolTip("顺序播放"); ui->labMode->setProperty("status", "list"); IconHelper::setIcon(ui->labMode, 0xf03a, 16); } return true; } } return QWidget::eventFilter(watched, event); } void frmMain::initForm() { ui->listWidget->addItem("刘德华 - 忘情水"); ui->listWidget->addItem("刘德华 - 忘情水"); ui->listWidget->addItem("刘德华 - 忘情水"); ui->listWidget->addItem("刘德华 - 忘情水"); ui->listWidget->addItem("刘德华 - 忘情水"); //设置无边框 QUIHelper::setFramelessForm(this); ui->widgetBottom->setProperty("flag", "btnPlay"); ui->btnPlay->setProperty("status", "play"); ui->labVolume->setProperty("status", "normal"); ui->labMode->setProperty("status", "list"); IconHelper::setIcon(ui->labIco, 0xf0f4, 25); IconHelper::setIcon(ui->btnMenu_Style, 0xf1fb, 15); IconHelper::setIcon(ui->btnMenu_Min, 0xf068, 15); IconHelper::setIcon(ui->btnMenu_Max, 0xf067, 15); IconHelper::setIcon(ui->btnMenu_Close, 0xf00d, 15); IconHelper::setIcon(ui->btnPlay, 0xf04b, 16); IconHelper::setIcon(ui->btnStop, 0xf04d, 16); IconHelper::setIcon(ui->btnPre, 0xf048, 15); IconHelper::setIcon(ui->btnNext, 0xf051, 15); IconHelper::setIcon(ui->labVolume, 0xf028, 18); IconHelper::setIcon(ui->labMode, 0xf03a, 16); ui->labTitle->setText("轻松云音乐"); this->setWindowTitle(ui->labTitle->text()); ui->labVolume->installEventFilter(this); ui->labMode->installEventFilter(this); #ifdef __arm__ on_btnMenu_Max_clicked(); ui->btnMenu_Min->setEnabled(false); ui->btnMenu_Max->setEnabled(false); ui->btnMenu_Close->setEnabled(false); #else ui->widgetTitle->installEventFilter(this); #endif filter << "*.mp3" << "*.wma" << "*.ape" << "*.flac" << "*aac" << "*.amr" << "*.ogg" << "*.wav" << "*.midi"; //左侧列表右键菜单 QAction *actionOpenFile = new QAction("打开文件", this); connect(actionOpenFile, SIGNAL(triggered(bool)), this, SLOT(doAction())); this->addAction(actionOpenFile); QAction *actionOpenDir = new QAction("打开文件夹", this); connect(actionOpenDir, SIGNAL(triggered(bool)), this, SLOT(doAction())); this->addAction(actionOpenDir); QAction *actionClear = new QAction("清空所有文件", this); connect(actionClear, SIGNAL(triggered(bool)), this, SLOT(doAction())); this->addAction(actionClear); QAction *actionList = new QAction("隐藏列表", this); connect(actionList, SIGNAL(triggered(bool)), this, SLOT(doAction())); this->addAction(actionList); style = new frmStyleWidget; connect(style, SIGNAL(changeStyle(QString)), this, SLOT(changeStyle(QString))); style->setCurrentStyle(4); ui->sliderPosition->setValue(50); ui->sliderVolume->setValue(50); //默认加载同目录下的声音文件 QDir d(qApp->applicationDirPath()); QStringList files = d.entryList(filter); addFile(files); } void frmMain::changeStyle(const QString &color) { QString textColor = "#5C5C5C"; QString textHoverColor = "#474849"; QString titleBgColor = color; QString titleTextColor = "#F0F0F0"; QString titleTextHoverColor = "#FFFFFF"; QString bottomBgColor = "#F6F6F8"; QString listBgColor = "#F5F5F7"; QString listSelectColor = "#E6E7EA"; QString borderColor = "#E1E1E2"; QString mainBgColor = "#FAFAFA"; QString sliderColor = color; QString sliderBgColor = "#C2C2C4"; QString sliderBorderColor = "#C2C2C4"; int sliderBorder = 1; setStyle(textColor, textHoverColor, titleBgColor, titleTextColor, titleTextHoverColor, bottomBgColor, listBgColor, listSelectColor, borderColor, mainBgColor, sliderColor, sliderBgColor, sliderBorderColor, sliderBorder); } void frmMain::setStyle(const QString &textColor, const QString &textHoverColor, const QString &titleBgColor, const QString &titleTextColor, const QString &titleTextHoverColor, const QString &bottomBgColor, const QString &listBgColor, const QString &listSelectColor, const QString &borderColor, const QString &mainBgColor, const QString &sliderColor, const QString &sliderBgColor, const QString &sliderBorderColor, int sliderBorder) { QStringList qss; //全局无焦点虚边框,全局文字颜色,全局字号 qss.append(QString("*{outline:0px;color:%1;}").arg(textColor)); qss.append(QString("QLabel#labTitle{font:75 %1px;}").arg(20)); qss.append(QString("QMenu,QMenuBar{font:%1px;}").arg(17)); //主界面顶部栏背景 qss.append(QString("QWidget#widgetTitle{background:%1;}").arg(titleBgColor)); qss.append(QString("QWidget#widgetTitle>QLabel{color:%1;}").arg(titleTextColor)); qss.append(QString("QWidget#widgetMenu>QAbstractButton{color:%1;}").arg(titleTextColor)); //底部背景 qss.append(QString("QWidget#widgetBottom{background:%1;}").arg(bottomBgColor)); //主界面顶部右上角 qss.append(QString("QWidget#widgetMenu QAbstractButton{border:0px solid #000000;}")); qss.append(QString("QAbstractButton::menu-indicator{image:None;}")); qss.append(QString("QWidget#widgetMenu QAbstractButton:hover{color:%1;}").arg(titleTextHoverColor)); qss.append(QString("QWidget#widgetMenu QAbstractButton:pressed{color:%1;}").arg(titleTextHoverColor)); //左侧列表框 qss.append(QString("QListView::item{padding:3px 0px 3px 0px;}")); qss.append(QString("QListView::item:hover,QListView::item:selected{background:%1;color:%2;}").arg(listSelectColor).arg(textHoverColor)); qss.append(QString("QListView{padding:5px;background:%1;color:%2;font:%3px;}").arg(listBgColor).arg(textColor).arg(16)); //边框颜色及宽度 qss.append(QString("QListView,#line{border-width:1px 1px 0px 1px;}")); qss.append(QString("QWidget#widgetBottom{border-width:1px 1px 1px 1px;}")); qss.append(QString("QWidget#widgetWave{border-width:1px 1px 0px 0px;}")); qss.append(QString("QListView,#line,QWidget#widgetBottom,QWidget#widgetWave{border-style:solid;border-color:%1;}").arg(borderColor)); //主界面背景 qss.append(QString("QWidget#widgetMain{background:%1;}").arg(mainBgColor)); //播放按钮 qss.append(QString("QWidget[flag=\"btnPlay\"] QAbstractButton{background:%1;color:%2;border:2px solid %3;}").arg(titleBgColor).arg(titleTextHoverColor).arg(titleTextColor)); qss.append(QString("QWidget[flag=\"btnPlay\"] QAbstractButton:hover{border:2px solid %1;}").arg(titleTextHoverColor)); qss.append(QString("#btnPlay,#btnStop{border-radius:20px;}#btnPre,#btnNext{border-radius:16px;}")); qss.append(QString("#labVolume,#labMode{border:none;background:none;color:%1;}").arg(textColor)); qss.append(QString("#labVolume:hover,#labMode:hover{color:%1;}").arg(textHoverColor)); //滑块条样式 int sliderHeight = 8; int handleSize = 16; qss.append(QString("QSlider::groove:horizontal{background:%1;height:%2px;border-radius:%3px;}").arg(sliderBgColor).arg(sliderHeight).arg(sliderHeight / 2)); qss.append(QString("QSlider::add-page:horizontal{background:%1;height:%2px;border-radius:%3px;}").arg(sliderBgColor).arg(sliderHeight).arg(sliderHeight / 2)); qss.append(QString("QSlider::sub-page:horizontal{background:%1;height:%2px;border-radius:%3px;}").arg(sliderColor).arg(sliderHeight).arg(sliderHeight / 2)); qss.append(QString("QSlider::handle:horizontal{width:%1px;margin-top:-%2px;margin-bottom:-%2px;border-radius:%3px;border:%4px solid %5;") .arg(handleSize - sliderBorder).arg(handleSize / 4 + sliderBorder).arg(handleSize / 2).arg(sliderBorder).arg(sliderBorderColor)); qss.append(QString("background:qradialgradient(spread:pad,cx:0.5,cy:0.5,radius:0.3,fx:0.5,fy:0.5,stop:0.3 %1,stop:0.8 #FFFFFF);}").arg(sliderColor)); //滚动条样式 qss.append(QString("QScrollBar:vertical{background:%1;padding:0px;border-radius:5px;min-width:10px;max-width:10px;}").arg(mainBgColor)); qss.append(QString("QScrollBar::handle:vertical{background:%1;min-height:120px;border-radius:5px;}").arg(textColor)); qss.append(QString("QScrollBar::handle:vertical:hover{background:%1;}").arg(textHoverColor)); qss.append(QString("QScrollBar::handle:vertical:pressed{background:%1;}").arg(textHoverColor)); qss.append(QString("QScrollBar::add-page:vertical{background:none;}")); qss.append(QString("QScrollBar::sub-page:vertical{background:none;}")); qss.append(QString("QScrollBar::add-line:vertical{background:none;}")); qss.append(QString("QScrollBar::sub-line:vertical{background:none;}")); //菜单样式 qss.append(QString("QMenuBar::item{color:%1;background:%2;margin:0px;padding:3px 10px;}").arg(textColor).arg(mainBgColor)); qss.append(QString("QMenu,QMenuBar,QMenu:disabled,QMenuBar:disabled{")); qss.append(QString("color:%1;background:%2;border:1px solid %3;margin:0px;}").arg(textColor).arg(mainBgColor).arg(borderColor)); qss.append(QString("QMenu::item{padding:3px 20px;}")); qss.append(QString("QMenu::indicator{width:13px;height:13px;}")); qss.append(QString("QMenu::item:selected,QMenuBar::item:selected{")); qss.append(QString("color:%1;border:none;background:%2;}").arg(titleTextHoverColor).arg(titleBgColor)); qss.append(QString("QMenu::separator{height:1px;background:%1;}").arg(borderColor)); qApp->setStyleSheet(qss.join("")); } void frmMain::addFile(const QStringList &files) { foreach (QString file, files) { QFileInfo f(file); ui->listWidget->addItem(f.fileName()); fullFile.append(f.absoluteFilePath()); } } void frmMain::doAction() { QAction *action = (QAction *)sender(); QString text = action->text(); if (text == "打开文件") { QStringList files = QFileDialog::getOpenFileNames(this, "选择音频文件", qApp->applicationDirPath(), QString("音频文件 (%1)").arg(filter.join(" "))); addFile(files); } else if (text == "打开文件夹") { QString dir = QFileDialog::getExistingDirectory(this, "选择音频文件夹"); if (!dir.isEmpty()) { QDir d(dir); QStringList files = d.entryList(filter); //取完整路径 QStringList fullFiles; foreach (QString file, files) { fullFiles.append(dir + "/" + file); } addFile(fullFiles); } } else if (text == "清空所有文件") { fullFile.clear(); ui->listWidget->clear(); } else if (text == "隐藏列表") { ui->listWidget->hide(); action->setText("显示列表"); } else if (text == "显示列表") { ui->listWidget->show(); action->setText("隐藏列表"); } } void frmMain::on_btnMenu_Style_clicked() { style->show(); } void frmMain::on_btnMenu_Min_clicked() { showMinimized(); } void frmMain::on_btnMenu_Max_clicked() { static bool max = false; static QRect location = this->geometry(); if (max) { this->setGeometry(location); ui->btnMenu_Max->setToolTip("最大化"); } else { location = this->geometry(); ui->btnMenu_Max->setToolTip("还原"); this->setGeometry(QUIHelper::getScreenRect()); } this->setProperty("canMove", max); max = !max; } void frmMain::on_btnMenu_Close_clicked() { exit(0); }