本系列所有文章可以在这里检察
接上文Qt5官方demo解析集34——Concentric Circles Example
光看标题大家可能感受我们今天会聊一聊 Qt 中 multimedia 模块的相关内容,确实,该 demo 基于这个模块实现了一个音乐播放器,不过呢,我们今天更偏重于该 demo 中 winextras 模块的使用。
从名字可以猜到,该模块可以用来为我们供给一些Windows平台上特别的扩展成果,例如DWM(Desktop Window Manager) 特效,Aero Peek,Taskbar,Jump Lists,Thumbnail Toolbar等等,Qt为我们封装了相关 API 使得它们变得越发简单易用。如果大家对这些名词感想陌生,可以前往Qt 官网检察更详细的介绍: 。或者,,我给大家举几个身边的栗子:
不知道大家有没有留意过,当我们在使用 Qt Creator 进行构建时,其任务栏图标上的进度状态?
或者当我们将鼠标左键放在QQ音乐任务栏图标上时,呈现的上一曲、暂停、下一曲这些预览窗口按钮:
亦或是,右键点击QQ音乐呈现的比来收听列表:
等等之类,我就不一一列举了,站在GUI的角度来说,这些对象绝不是可有可无的
细节决定成败,用户总是能够在一些小的细节上收获惊喜和打动。
那么,看看我们如安在 Qt 中使用这些贴心的小玩意儿。
记得在pro文件中添加
[cpp]
QT += winextras
然后看看main.cpp,这里面有个实用的关联文件格局的helper函数:
[cpp]
#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"));