翻譯|使用教程|編輯:鮑佳佳|2021-04-09 10:29:18.040|閱讀 255 次
概述:Media Player示例使用Microsoft Media Player ActiveX控件來實(shí)現(xiàn)功能正常的媒體播放器應(yīng)用程序。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
Media Player示例使用Microsoft Media Player ActiveX控件來實(shí)現(xiàn)功能正常的媒體播放器應(yīng)用程序。
開始前先介紹一下我們的Qt商業(yè)控件:
Media Player演示了Qt應(yīng)用程序如何使用信號(hào),插槽和dynamicCall()功能與嵌入式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類使用Qt Designer創(chuàng)建的Ui::MainWindow類聲明了一個(gè)基于QMainWindow的用戶界面。實(shí)現(xiàn)了許多插槽來處理來自用戶界面元素的事件,包括mediaPlayer對(duì)象,它是一個(gè)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(""); }
構(gòu)造函數(shù)初始化用戶界面,還原以前保存的窗口幾何形狀,并使用該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)改變時(shí),on_mediaPlayer_PlayStateChange插槽將處理mediaPlayer對(duì)象發(fā)出的信號(hào)。
void MainWindow::openMedia(const QString &mediaUrl) { if (!mediaUrl.isEmpty()) m_ui.mediaPlayer->dynamicCall("URL", mediaUrl); }
openMedia()函數(shù)允許通過使用該dynamicCall()函數(shù)在ActiveX控件中設(shè)置URL屬性來打開媒體文件,從而導(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庫。然后運(yùn)行您的make工具examples/activeqt/mediaplayer并運(yùn)行生成的mediaplayer.exe。
下載Qt立刻體驗(yàn)吧?。?/strong>本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: