翻譯|行業(yè)資訊|編輯:鮑佳佳|2021-08-31 10:14:13.127|閱讀 151 次
概述:媒體播放器示例使用 Microsoft 媒體播放器 ActiveX 控件來(lái)實(shí)現(xiàn)功能性媒體播放器應(yīng)用程序。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Qt是一個(gè)跨平臺(tái)框架,通常用作圖形工具包,它不僅創(chuàng)建CLI應(yīng)用程序中非常有用。而且它也可以在三種主要的臺(tái)式機(jī)操作系統(tǒng)以及移動(dòng)操作系統(tǒng)(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式設(shè)備,Android(Necessitas)和iOS的端口上運(yùn)行。現(xiàn)在我們?yōu)槟闾峁┝嗣赓M(fèi)的試用版。
Qt組件推薦:
媒體播放器示例使用 Microsoft 媒體播放器 ActiveX 控件來(lái)實(shí)現(xiàn)功能性媒體播放器應(yīng)用程序。
Media Player演示了 Qt 應(yīng)用程序如何使用信號(hào)、插槽和dynamicCall()函數(shù)與嵌入式 ActiveX 控件進(jìn)行通信。
class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(); ~MainWindow(); void openMedia(const QString &mediaUrl); public slots: void on_mediaPlayer_PlayStateChange(int newState); void on_actionOpen_triggered(); void on_actionExit_triggered(); void on_actionAbout_triggered(); void on_actionAboutQt_triggered(); private: void updateWindowTitle(const QString &state); Ui::MainWindow m_ui; };
MainWindow該類QMainWindow使用Ui::MainWindowQt Designer 創(chuàng)建的類聲明了一個(gè)基于用戶界面。實(shí)現(xiàn)了許多插槽來(lái)處理來(lái)自用戶界面元素的事件,包括mediaPlayer對(duì)象,它是托管 Microsoft Media Player ActiveX 控件的QAxWidget。
MainWindow::MainWindow() { m_ui.setupUi(this); QSettings settings(QSettings::IniFormat, QSettings::UserScope, QCoreApplication::organizationName(), QCoreApplication::applicationName()); const QByteArray restoredGeometry = settings.value(QLatin1String(geometryKey)).toByteArray(); if (restoredGeometry.isEmpty() || !restoreGeometry(restoredGeometry)) { const QRect availableGeometry = screen()->availableGeometry(); const QSize size = (availableGeometry.size() * 4) / 5; resize(size); move(availableGeometry.center() - QPoint(size.width(), size.height()) / 2); } m_ui.mediaPlayer->dynamicCall("enableContextMenu", false); m_ui.mediaPlayer->dynamicCall("stretchToFit", true); updateWindowTitle(""); }
構(gòu)造函數(shù)初始化用戶界面,恢復(fù)先前保存的窗口幾何圖形,并使用該dynamicCall()函數(shù)調(diào)用由 Microsoft Media Player ActiveX 控件實(shí)現(xiàn)的 API,以設(shè)置初始配置參數(shù)。
void MainWindow::on_mediaPlayer_PlayStateChange(int newState) { static const QHash<int, const char *> stateMapping { {1, "Stopped"}, {2, "Paused"}, {3, "Playing"}, {4, "Scanning Forwards"}, {5, "Scanning Backwards"}, {6, "Buffering"}, {7, "Waiting"}, {8, "Media Ended"}, {9, "Transitioning"}, {10, "Ready"}, {11, "Reconnecting"}, }; const char *stateStr = stateMapping.value(newState, ""); updateWindowTitle(tr(stateStr)); }
當(dāng)對(duì)象的狀態(tài)發(fā)生變化時(shí),on_mediaPlayer_PlayStateChange插槽會(huì)處理mediaPlayer對(duì)象發(fā)出的信號(hào)。
void MainWindow::openMedia(const QString &mediaUrl) { if (!mediaUrl.isEmpty()) m_ui.mediaPlayer->dynamicCall("URL", mediaUrl); }
openMedia()函數(shù)允許通過(guò)使用該dynamicCall()函數(shù)在 ActiveX 控件中設(shè)置 URL 屬性來(lái)打開媒體文件,從而導(dǎo)致媒體文件被加載和播放。
int main(int argc, char *argv[]) { QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QApplication app(argc, argv); QCoreApplication::setApplicationVersion(QT_VERSION_STR); QCoreApplication::setApplicationName(QLatin1String("Active Qt Media Player")); QCoreApplication::setOrganizationName(QLatin1String("QtProject")); MainWindow w; QCommandLineParser parser; parser.setApplicationDescription(QCoreApplication::applicationName()); parser.addHelpOption(); parser.addVersionOption(); parser.addPositionalArgument("file", "The media file to open."); parser.process(app); if (!parser.positionalArguments().isEmpty()) w.openMedia(parser.positionalArguments().constFirst()); w.show(); return app.exec(); }
main()函數(shù)使用標(biāo)準(zhǔn) Qt API 啟動(dòng)應(yīng)用程序,并使用可選的命令行參數(shù)作為播放器要加載的媒體文件的名稱。
要構(gòu)建示例,您必須首先構(gòu)建QAxContainer庫(kù)。然后運(yùn)行您的 make 工具examples/activeqt/mediaplayer并運(yùn)行生成的mediaplayer.exe.
====================================================
想要了解或購(gòu)買Qt正版授權(quán)的朋友,歡迎
Qt技術(shù)交流群現(xiàn)已開通,QQ搜索群號(hào)“765444821”或者掃描下方二維碼即可加入
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: