⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 miniplayer.cpp

📁 Qt开发的GRE背单词软件
💻 CPP
字号:
#include "MiniPlayer.h"
#include "DictionaryModel.h"
#include "UserSetting.h"
#include <QStyle>
#include <QTimer>
#include <QWheelEvent>
#include <QDesktopWidget>

MiniPlayer::MiniPlayer(DictionaryModel* m, QWidget *parent, Qt::WFlags)
	: QDialog(parent, Qt::Dialog | Qt::WindowStaysOnTopHint | Qt::WindowMinimizeButtonHint), 
	  model(m)
{
	ui.setupUi(this);
	initView();
	initConnection();
	slotStop();

	mp3Dir = UserSetting::getInstance("Global")->value("Mp3Dir").toString();
	outputPath = Phonon::createPath(&mediaObject, &audioOutput);
}

void MiniPlayer::closeEvent(QCloseEvent*) {
	slotStop();
	emit accepted();
}

void MiniPlayer::initView()
{
	ui.buttonPlay->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
	ui.buttonStop->setIcon(style()->standardIcon(QStyle::SP_MediaStop));
	ui.buttonPrev->setIcon(style()->standardIcon(QStyle::SP_MediaSeekBackward));
	ui.buttonNext->setIcon(style()->standardIcon(QStyle::SP_MediaSeekForward));
	volumePixmap = style()->standardPixmap(QStyle::SP_MediaVolume);
	mutedPixmap  = style()->standardPixmap(QStyle::SP_MediaVolumeMuted);
	ui.labelVolume->setPixmap(volumePixmap);
	ui.listView->setModel(model);
	ui.listView->setModelColumn(DictionaryModel::ENGLISH);
	ui.listView->hide();
	ui.wordDisplayer->setPhoneticFont(QFont("TOPhonetic", 12));
	ui.wordDisplayer->setEnglishFont (QFont("Arial", 24, QFont::Bold));
}

void MiniPlayer::initConnection()
{
	connect(ui.buttonPlay, SIGNAL(clicked()),  this, SLOT(slotPlay()));
	connect(ui.buttonStop, SIGNAL(clicked()),  this, SLOT(slotStop()));
	connect(ui.buttonPrev, SIGNAL(clicked()),  this, SLOT(slotPrev()));
	connect(ui.buttonNext, SIGNAL(clicked()),  this, SLOT(slotNext()));
	connect(ui.sliderVolume, SIGNAL(valueChanged(int)), this, SLOT(slotSetVolume(int)));
	connect(&mediaObject,    SIGNAL(finished()),        this, SLOT(slotOnFinish()));
	connect(ui.listView->selectionModel(), SIGNAL(currentRowChanged(QModelIndex, QModelIndex)),
			this,						   SLOT  (slotSetCurrentRow(QModelIndex)));
}

void MiniPlayer::slotSetCurrentRow(const QModelIndex& idx)
{
	if(idx.isValid())
		setCurrentRow(idx.row());
}

void MiniPlayer::slotPlay()
{
	playing = !playing;
	ui.buttonStop->setEnabled(playing);
	ui.buttonPlay->setIcon(style()->standardIcon(
		playing ? QStyle::SP_MediaPause : QStyle::SP_MediaPlay));

	speak(model->getEnglish(currentRow, false));
}

void MiniPlayer::slotStop()
{
	playing = false;
	setCurrentRow(0);
	ui.buttonStop->setEnabled(false);
	ui.buttonPlay->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
}

void MiniPlayer::slotPrev() {
	setCurrentRow(currentRow - 1);
}

void MiniPlayer::slotNext() 
{
	if(currentRow == model->rowCount()-1 && !ui.buttonRepeat->isChecked())
		slotStop();
	else
		setCurrentRow((currentRow + 1) % model->rowCount());
}

void MiniPlayer::setCurrentRow(int row)
{
	currentRow = row;
	ui.listView->selectionModel()->select(model->index(row, DictionaryModel::ENGLISH),
										  QItemSelectionModel::SelectCurrent);
	ui.listView->scrollTo(model->index(row, DictionaryModel::ENGLISH));
	ui.listView->setFocus();
	ui.wordDisplayer->setEnglishColor(model->getEnglishColor(currentRow));
	ui.wordDisplayer->setHtml("<center>" + 
									model->getEnglish(currentRow, false) + 
									"<p>" + model->getPhonetic(currentRow) + "</p>" + 
							  "</center>");
	speak(model->getEnglish(currentRow, false));
}

void MiniPlayer::speak(const QString& word)
{
	if(!playing)
		return;

	QString fileName = mp3Dir + "/" + QString(word.at(0)) + "/" + word + ".mp3";
	if(QFile::exists(fileName))
	{
		mediaObject.setCurrentSource(Phonon::MediaSource(fileName));
		mediaObject.play();
	}
	else
		slotOnFinish();
}

void MiniPlayer::slotOnFinish() {
	QTimer::singleShot(1000, this, SLOT(slotNext()));
}

void MiniPlayer::wheelEvent(QWheelEvent* event) {
	ui.sliderVolume->setValue(ui.sliderVolume->value() + event->delta()/10.0);
}

void MiniPlayer::slotSetVolume(int volume)
{
	audioOutput.setVolume(volume / 100.0);
	ui.labelVolume->setPixmap(volume == 0 ? mutedPixmap : volumePixmap);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -