翻譯|行業資訊|編輯:鮑佳佳|2021-08-31 10:14:13.127|閱讀 151 次
概述:媒體播放器示例使用 Microsoft 媒體播放器 ActiveX 控件來實現功能性媒體播放器應用程序。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Qt是一個跨平臺框架,通常用作圖形工具包,它不僅創建CLI應用程序中非常有用。而且它也可以在三種主要的臺式機操作系統以及移動操作系統(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式設備,Android(Necessitas)和iOS的端口上運行?,F在我們為你提供了免費的試用版。
Qt組件推薦:
媒體播放器示例使用 Microsoft 媒體播放器 ActiveX 控件來實現功能性媒體播放器應用程序。
Media Player演示了 Qt 應用程序如何使用信號、插槽和dynamicCall()函數與嵌入式 ActiveX 控件進行通信。
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 創建的類聲明了一個基于用戶界面。實現了許多插槽來處理來自用戶界面元素的事件,包括mediaPlayer對象,它是托管 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(""); }
構造函數初始化用戶界面,恢復先前保存的窗口幾何圖形,并使用該dynamicCall()函數調用由 Microsoft Media Player ActiveX 控件實現的 API,以設置初始配置參數。
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)); }
當對象的狀態發生變化時,on_mediaPlayer_PlayStateChange插槽會處理mediaPlayer對象發出的信號。
void MainWindow::openMedia(const QString &mediaUrl) { if (!mediaUrl.isEmpty()) m_ui.mediaPlayer->dynamicCall("URL", mediaUrl); }
openMedia()函數允許通過使用該dynamicCall()函數在 ActiveX 控件中設置 URL 屬性來打開媒體文件,從而導致媒體文件被加載和播放。
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()函數使用標準 Qt API 啟動應用程序,并使用可選的命令行參數作為播放器要加載的媒體文件的名稱。
要構建示例,您必須首先構建QAxContainer庫。然后運行您的 make 工具examples/activeqt/mediaplayer并運行生成的mediaplayer.exe.
====================================================
想要了解或購買Qt正版授權的朋友,歡迎
Qt技術交流群現已開通,QQ搜索群號“765444821”或者掃描下方二維碼即可加入
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: