<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                本系列所有文章可以在這里查看[http://blog.csdn.net/cloud_castle/article/category/2123873](http://blog.csdn.net/cloud_castle/article/category/2123873) 接上文[](http://blog.csdn.net/cloud_castle/article/details/39251931)[](http://blog.csdn.net/cloud_castle/article/details/39291069)[Qt5官方demo解析集34——Concentric Circles Example](http://blog.csdn.net/cloud_castle/article/details/43490767) 光看標題大家可能覺得我們今天會聊一聊 Qt 中 multimedia 模塊的相關內容,確實,該 demo 基于這個模塊實現了一個音樂播放器,不過呢,我們今天更側重于該 demo 中 winextras 模塊的使用。 從名字可以猜到,該模塊可以用來為我們提供一些Windows平臺上額外的擴展功能,例如DWM(Desktop Window Manager) 特效,Aero Peek,Taskbar,Jump Lists,Thumbnail Toolbar等等,Qt為我們封裝了相關?API 使得它們變得更加簡單易用。如果大家對這些名詞感到陌生,可以前往Qt 官網查看更詳細的介紹:http://doc.qt.io/qt-5/qtwinextras-overview.html 。或者,我給大家舉幾個身邊的栗子: 不知道大家有沒有留意過,當我們在使用?Qt Creator 進行構建時,其任務欄圖標上的進度狀態? ![](https://box.kancloud.cn/2016-01-18_569cbd0a7049b.jpg) 或者當我們將鼠標左鍵放在QQ音樂任務欄圖標上時,出現的上一曲、暫停、下一曲這些預覽窗口按鈕: ![](https://box.kancloud.cn/2016-01-18_569cbd0a821e3.jpg) 亦或是,右鍵點擊QQ音樂出現的最近收聽列表: ![](https://box.kancloud.cn/2016-01-18_569cbd0a95b0c.jpg) 等等之類,我就不一一列舉了,站在GUI的角度來說,這些東西絕不是可有可無的 細節決定成敗,用戶總是能夠在一些小的細節上收獲驚喜和感動。 那么,看看我們如何在 Qt 中使用這些貼心的小玩意兒。 記得在pro文件中添加 ~~~ QT?+=?winextras ~~~ 然后看看main.cpp,這里面有個實用的關聯文件格式的helper函數: **[cpp]**?[view plain](http://blog.csdn.net/cloud_castle/article/details/43672509# "view plain")[copy](http://blog.csdn.net/cloud_castle/article/details/43672509# "copy")[![](https://box.kancloud.cn/2015-10-13_561c56d3593bb.png)](https://code.csdn.net/snippets/605094 "在CODE上查看代碼片")[![](https://box.kancloud.cn/2015-10-13_561c56d363c1b.svg)](https://code.csdn.net/snippets/605094/fork "派生到我的代碼片") ~~~ #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())); } ~~~ 最后我們看看程序運行效果: ![](https://box.kancloud.cn/2016-01-18_569cbd0aa9e81.jpg) 在Win7下當我們暫停播放時,任務欄會出現一個暫停樣式的圖標,而在Win8中則表現為綠色的進度條變成了黃色: ![](https://box.kancloud.cn/2016-01-18_569cbd0abd45f.jpg)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看