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

📄 playerwindow.cpp

📁 一个基于qt的媒体播放器程序源码
💻 CPP
字号:
#include <qaxwidget.h>#include <qdir.h>#include <qfiledialog.h>#include <qlayout.h>#include <qslider.h>#include <qstyle.h>#include <qtimer.h>#include <qtoolbutton.h>#include "playerwindow.h"PlayerWindow::PlayerWindow(QWidget *parent, const char *name)    : QWidget(parent, name){    setCaption(tr("Media Player"));    fileFilters = tr("Video files (*.mpg *.mpeg *.avi *.wmv)\n"                     "Audio files (*.mp3 *.wav)");    updateTimer = 0;    setMouseTracking(true);    wmp = new QAxWidget(this);    wmp->setControl("{22D6F312-B0F6-11D0-94AB-0080C74C7E95}");    wmp->setProperty("ShowControls", QVariant(false, 0));    wmp->setSizePolicy(QSizePolicy::Expanding,                       QSizePolicy::Expanding);    connect(wmp, SIGNAL(PlayStateChange(int, int)),            this, SLOT(onPlayStateChange(int, int)));    connect(wmp, SIGNAL(ReadyStateChange(ReadyStateConstants)),            this, SLOT(onReadyStateChange(ReadyStateConstants)));    connect(wmp, SIGNAL(PositionChange(double, double)),            this, SLOT(onPositionChange(double, double)));    openButton = new QToolButton(this);    openButton->setText(tr("&Open..."));    connect(openButton, SIGNAL(clicked()), this, SLOT(openFile()));    playPauseButton = new QToolButton(this);    playPauseButton->setText(tr("&Play"));    playPauseButton->setEnabled(false);    connect(playPauseButton, SIGNAL(clicked()), wmp, SLOT(Play()));    stopButton = new QToolButton(this);    stopButton->setText(tr("&Stop"));    stopButton->setEnabled(false);    connect(stopButton, SIGNAL(clicked()), wmp, SLOT(Stop()));    seekSlider = new QSlider(Horizontal, this);    seekSlider->setEnabled(false);    connect(seekSlider, SIGNAL(valueChanged(int)),            this, SLOT(sliderValueChanged(int)));    connect(seekSlider, SIGNAL(sliderPressed()),            wmp, SLOT(Pause()));    QHBoxLayout *buttonLayout = new QHBoxLayout;    buttonLayout->addWidget(openButton);    buttonLayout->addWidget(playPauseButton);    buttonLayout->addWidget(stopButton);    QVBoxLayout *mainLayout = new QVBoxLayout(this);    mainLayout->addWidget(wmp);    mainLayout->addLayout(buttonLayout);    mainLayout->addWidget(seekSlider);}void PlayerWindow::timerEvent(QTimerEvent *event){    if (event->timerId() == updateTimer) {        double curPos = wmp->property("CurrentPosition").toDouble();        onPositionChange(-1, curPos);    } else {        QWidget::timerEvent(event);    }}void PlayerWindow::onPlayStateChange(int, int newState){    playPauseButton->disconnect(wmp);    switch (newState) {    case Stopped:        if (updateTimer) {            killTimer(updateTimer);            updateTimer = 0;        }        // fall through    case Paused:        connect(playPauseButton, SIGNAL(clicked()),                wmp, SLOT(Play()));        stopButton->setEnabled(false);        playPauseButton->setText(tr("&Play"));        break;    case Playing:        if (!updateTimer)            updateTimer = startTimer(100);        connect(playPauseButton, SIGNAL(clicked()),                wmp, SLOT(Pause()));        stopButton->setEnabled(true);        playPauseButton->setText(tr("&Pause"));    }}void PlayerWindow::onReadyStateChange(ReadyStateConstants ready){    if (ready == Complete) {        double duration = 60 * wmp->property("Duration").toDouble();        seekSlider->setMinValue(0);        seekSlider->setMaxValue((int)duration);        seekSlider->setEnabled(true);        playPauseButton->setEnabled(true);    }}void PlayerWindow::onPositionChange(double, double newPos){    seekSlider->blockSignals(true);    seekSlider->setValue((int)(newPos * 60));    seekSlider->blockSignals(false);}void PlayerWindow::sliderValueChanged(int newValue){    seekSlider->blockSignals(true);    wmp->setProperty("CurrentPosition", (double)newValue / 60);    seekSlider->blockSignals(false);}void PlayerWindow::openFile(){    QString fileName =            QFileDialog::getOpenFileName(".", fileFilters, this);    if (!fileName.isEmpty())        wmp->setProperty("FileName",                         QDir::convertSeparators(fileName));}

⌨️ 快捷键说明

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