翻譯|使用教程|編輯:鮑佳佳|2021-04-09 10:29:18.040|閱讀 255 次
概述:Media Player示例使用Microsoft Media Player ActiveX控件來實現功能正常的媒體播放器應用程序。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
Media Player示例使用Microsoft Media Player ActiveX控件來實現功能正常的媒體播放器應用程序。
開始前先介紹一下我們的Qt商業控件:
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類使用Qt Designer創建的Ui::MainWindow類聲明了一個基于QMainWindow的用戶界面。實現了許多插槽來處理來自用戶界面元素的事件,包括mediaPlayer對象,它是一個QAxWidget,托管Microsoft Media Player ActiveX控件。
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立刻體驗吧!!本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: