翻譯|行業資訊|編輯:鮑佳佳|2021-08-31 10:14:13.127|閱讀 151 次
概述:媒體播放器示例使用 Microsoft 媒體播放器 ActiveX 控件來實現功能性媒體播放器應用程序。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Qt是一個跨平臺框架,通常用作圖形工具包,它不僅創建CLI應用程序中非常有用。而且它也可以在三種主要的臺式機操作系統以及移動操作系統(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式設備,Android(Necessitas)和iOS的端口上運行。現在我們為你提供了免費的試用版。
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@ke049m.cn
文章轉載自: