Qt操控Windows Media Player

一、前言

对于Windows平台,Qt有特有的模块来调用ActivityX控件

比如调用WMP,首先需要知道WMP的CLSID:{6BF52A52-394A-11D3-B153-00C04F79FAA6}


二、效果展示

请添加图片描述


三、具体步骤

1、在工程文件(.pro)中添加库

QT += axcontainer

在这里插入图片描述

2、添加头文件

#include <QAxObject>	//用于操作WMP对象
#include <QAxWidget>	//用于显示WMP

3、添加WMP

axWidget = new QAxWidget;
axWidget->setControl("{6BF52A52-394A-11d3-B153-00C04F79FAA6}");

4、控制WMP

//使用dynamicCall()来调用成员函数,setProporty()来调用属性参数

axWidget->dynamicCall("URL",path);//设置组件的属性,也可利用setProperty()函数


QAxObject *controls = axWidget->querySubObject("controls");	
controls->dynamicCall("stop()");	//调用成员函数

Windows Media Player ActiveX 常用的属性和方法

属性/方法名说明
[基本属性]
URL:String;指定媒体位置,本机或网络地址
uiMode:String;播放器界面模式,可为Full, Mini, None, Invisible
playState:integer;播放状态,1=停止,2=暂停,3=播放,6=正在缓冲,9=正在连接,10=准备就绪
enableContextMenu:Boolean;启用/禁用右键菜单
fullScreen:boolean;是否全屏显示
[controls]wmp.controls //播放器基本控制
controls.play;播放
controls.pause;暂停
controls.stop;停止
controls.currentPosition:double;当前进度
controls.currentPositionString:string;当前进度,字符串格式。如“00:23”
controls.fastForward;快进
controls.fastReverse;快退
controls.next;下一曲
controls.previous;上一曲
[settings]wmp.settings
settings.volume:integer;音量,0-100
settings.autoStart:Boolean;是否自动播放
settings.mute:Boolean;是否静音
settings.playCount:integer;播放次数
[currentMedia]wmp.currentMedia //当前媒体属性
currentMedia.duration:double;媒体总长度
currentMedia.durationString:string;媒体总长度,字符串格式。如“03:24”
currentMedia.getItemInfo(const string);获取当前媒体信息"Title"=媒体标题,“Author”=艺术家,“Copyright”=版权信息,“Description”=媒体内容描述,“Duration”=持续时间(秒),“FileSize”=文件大小,“FileType”=文件类型,“sourceURL”=原始地址
currentMedia.setItemInfo(const string);通过属性名设置媒体信息
currentMedia.name:string;同 currentMedia.getItemInfo(“Title”)
[currentPlaylist]wmp.currentPlaylist //当前播放列表属性
currentPlaylist.count:integer;当前播放列表所包含媒体数
currentPlaylist.Item[integer];获取或设置指定项目媒体信息,其子属性同wmp.currentMedia

我们并不知道wmp有那些参数和成员函数,对此,Qt提供了dumpdoc命令来自动生成对应CLSID控件的说明文档:

打开编译器命令行,输入指令:dumpdoc {xxxx} -o xxx.html
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


四、详细代码

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDebug>
#include <QFileDialog>
#include <QDesktopWidget>
#include <QAxObject>
#include <QAxWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void InitUI();
    QAxWidget* axWidget;

protected:
    void closeEvent(QCloseEvent *event);


private slots:
    void on_btn_openFile_clicked();

    void on_btn_play_clicked();

    void on_btn_pause_clicked();

    void on_btn_stop_clicked();

    void on_SoundVolumn_valueChanged(int value);

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    InitUI();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::InitUI()
{
    this->setWindowFlags(Qt::WindowStaysOnTopHint); //窗口始终置顶

    ui->SoundVolumn->setRange(0,100);
    ui->SoundVolumn->setValue(0);

    axWidget = new QAxWidget;
    axWidget->setControl("{6BF52A52-394A-11d3-B153-00C04F79FAA6}");

    QDesktopWidget* desktop = QApplication::desktop();
    axWidget->setGeometry(desktop->screenGeometry());

}

void MainWindow::closeEvent(QCloseEvent *event)
{
    axWidget->close();
}

void MainWindow::on_btn_openFile_clicked()
{
    QString path = QFileDialog::getOpenFileName(this,"选择要播放的文件");
    axWidget->dynamicCall("URL",path);//设置组件的属性,也可利用setProperty()函数

    //停止播放
    QAxObject *controls = axWidget->querySubObject("controls");
    controls->dynamicCall("stop()");

    //音量为0
    QAxObject *settings = axWidget->querySubObject("settings");
    settings->dynamicCall("volume",0);

    //视频信息
    QAxObject *currentMedia = axWidget->querySubObject("currentMedia");
    QString Title = currentMedia->dynamicCall("getItemInfo(QString)","title").toString();
    QString Author = currentMedia->dynamicCall("getItemInfo(QString)","author").toString();
    QString Copyright = currentMedia->dynamicCall("getItemInfo(QString)","copyright").toString();
    QString Description = currentMedia->dynamicCall("getItemInfo(QString)","description").toString();
    QString Duration = currentMedia->dynamicCall("getItemInfo(QString)","duration").toString();
    QString FileSize = currentMedia->dynamicCall("getItemInfo(QString)","fileSize").toString();
    QString FileType = currentMedia->dynamicCall("getItemInfo(QString)","fileType").toString();
    QString sourceURL = currentMedia->dynamicCall("getItemInfo(QString)","sourceURL").toString();
    ui->InfoShow->clear();
    ui->InfoShow->append("媒体标题: " + Title);
    ui->InfoShow->append("艺术家: " + Author);
    ui->InfoShow->append("版权信息: " + Copyright);
    ui->InfoShow->append("媒体内容描述: " + Description);
    ui->InfoShow->append("持续时间(秒): " + Duration);
    ui->InfoShow->append("文件大小: " + FileSize);
    ui->InfoShow->append("文件类型: " + FileType);
    ui->InfoShow->append("原始地址: " + sourceURL);

    axWidget->show();
}

void MainWindow::on_btn_play_clicked()
{
    //获取组件的子对象
    QAxObject *controls = axWidget->querySubObject("controls");
    //调用组件的方法
    controls->dynamicCall("play()");
}

void MainWindow::on_btn_pause_clicked()
{
    //获取组件的子对象
    QAxObject *controls = axWidget->querySubObject("controls");
    //调用组件的方法
    controls->dynamicCall("pause()");
}

void MainWindow::on_btn_stop_clicked()
{
    //获取组件的子对象
    QAxObject *controls = axWidget->querySubObject("controls");
    //调用组件的方法
    controls->dynamicCall("stop()");
}

void MainWindow::on_SoundVolumn_valueChanged(int value)
{
    QAxObject *settings = axWidget->querySubObject("settings");
    settings->dynamicCall("volume",value);
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贝勒里恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值