Qt5 Music Player(使用winextras模块)

在pro文件中添加:

QT += winextras  

 然后看看main.cpp,这里面有个实用的关联文件格式的helper函数:

#include "musicplayer.h"  
  
#include <QApplication>  
#include <QFileInfo>  
#include <QSettings>  
#include <QIcon>  
#include <QDir>  
  
//! [0]  
static void associateFileTypes(const QStringList &fileTypes) // 这是一个helper函数,用来将某文件格式与本程序关联  
{  
    QString displayName = QGuiApplication::applicationDisplayName();  
    QString filePath = QCoreApplication::applicationFilePath();  
    QString fileName = QFileInfo(filePath).fileName();  
  
    QSettings settings("HKEY_CURRENT_USER\\Software\\Classes\\Applications\\" + fileName, QSettings::NativeFormat);  
    settings.setValue("FriendlyAppName", displayName);  
  
    settings.beginGroup("SupportedTypes");  
    foreach (const QString& fileType, fileTypes)  
        settings.setValue(fileType, QString());  
    settings.endGroup();  
  
    settings.beginGroup("shell");  
    settings.beginGroup("open");  
    settings.setValue("FriendlyAppName", displayName);  
    settings.beginGroup("Command");  
    settings.setValue(".", QChar('"') + QDir::toNativeSeparators(filePath) + QString("\" \"%1\""));  
}  
//! [0]  
  
int main(int argc, char *argv[])  
{  
    QApplication app(argc, argv);  
    app.setApplicationName("MusicPlayer");  
    app.setOrganizationName("QtWinExtras");  
    app.setOrganizationDomain("qt-project.org");  
    app.setApplicationDisplayName("QtWinExtras Music Player");  
    app.setWindowIcon(QIcon(":/logo.png"));  
  
    associateFileTypes(QStringList(".mp3"));                // helper函数的使用方式  
  
    MusicPlayer player;  
    const QStringList arguments = QCoreApplication::arguments();  
    if (arguments.size() > 1)                              // 如果打开参数包含文件名  
        player.playFile(arguments.at(1));                  // 则开始播放第一首  
    player.resize(300, 60);  
    player.show();  
  
    return app.exec();  
}  

      VolumeButton 类继承自QToolButton,使用 Qt 中的标准音量图像设置为自身图标,

setIcon(style()->standardIcon(QStyle::SP_MediaVolume));  

      并提供了一个可以调节音量的弹出菜单,并根据DWM的混合状态决定自身的显示状态,代码都很容易理解,就不贴出来了。

     在MusicPlayer类中,首先记得

#include <QtWinExtras>  

       然后我们通过下面的函数来创建Jump Lists:

void MusicPlayer::createJumpList()  
{  
    QWinJumpList jumplist;  
    jumplist.recent()->setVisible(true);  
}  

     Taskbar的创建与Progress类似,我们将其与窗口上的进度条关联起来:

void MusicPlayer::createTaskbar()  
{  
    taskbarButton = new QWinTaskbarButton(this);  
    taskbarButton->setWindow(windowHandle());  // 使用窗口句柄作为参数  
  
    taskbarProgress = taskbarButton->progress();  
    connect(positionSlider, SIGNAL(valueChanged(int)), taskbarProgress, SLOT(setValue(int)));  
    connect(positionSlider, SIGNAL(rangeChanged(int,int)), taskbarProgress, SLOT(setRange(int,int)));  
  
    connect(&mediaPlayer, SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(updateTaskbar()));  
}  

     要创建预览窗口按钮,首先需要创建一个QWinThumbnailToolBar,然后在上面添加按钮:

void MusicPlayer::createThumbnailToolBar()  
{  
    thumbnailToolBar = new QWinThumbnailToolBar(this);  
    thumbnailToolBar->setWindow(windowHandle());  
  
    playToolButton = new QWinThumbnailToolButton(thumbnailToolBar);  
    playToolButton->setEnabled(false);  
    playToolButton->setToolTip(tr("Play"));  
    playToolButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));  
    connect(playToolButton, SIGNAL(clicked()), this, SLOT(togglePlayback()));  
  
    forwardToolButton = new QWinThumbnailToolButton(thumbnailToolBar);  
    forwardToolButton->setEnabled(false);  
    forwardToolButton->setToolTip(tr("Fast forward"));  
    forwardToolButton->setIcon(style()->standardIcon(QStyle::SP_MediaSeekForward));  
    connect(forwardToolButton, SIGNAL(clicked()), this, SLOT(seekForward()));  
  
    backwardToolButton = new QWinThumbnailToolButton(thumbnailToolBar);  
    backwardToolButton->setEnabled(false);  
    backwardToolButton->setToolTip(tr("Rewind"));  
    backwardToolButton->setIcon(style()->standardIcon(QStyle::SP_MediaSeekBackward));  
    connect(backwardToolButton, SIGNAL(clicked()), this, SLOT(seekBackward()));  
  
    thumbnailToolBar->addButton(backwardToolButton);  
    thumbnailToolBar->addButton(playToolButton);  
    thumbnailToolBar->addButton(forwardToolButton);  
  
    connect(&mediaPlayer, SIGNAL(positionChanged(qint64)), this, SLOT(updateThumbnailToolBar()));  
    connect(&mediaPlayer, SIGNAL(durationChanged(qint64)), this, SLOT(updateThumbnailToolBar()));  
    connect(&mediaPlayer, SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(updateThumbnailToolBar()));  
}  

猜你喜欢

转载自blog.csdn.net/lengyuezuixue/article/details/81463241