Qt qwidget嵌入ppt

1. pro :  增加  QT+=axcontainer

2.打开ppt

   QAxObject *ppt_dsoframer;
   ppt_dsoframer=new QAxObject(this);
   bool ppt_state=ppt_dsoframer->setControl("Powerpoint.Application");
   if(!ppt_state)//连接控件
          QMessageBox::critical(this, "Error", "no office ppt!");

     QString filePath = QFileDialog::getOpenFileName(0, "Open ppt", QString(), "*.pptx *ppt;; ");
      if (filePath.isEmpty())
             return;
     ppt_dsoframer->dynamicCall("SetVisible(bool)",true); //设置窗口显示
     ppt_dsoframer->querySubObject("Presentations()")->dynamicCall("Open(string)",filePath); //选择打开ppt的路径
     //放映这个剪辑
     ppt_dsoframer->querySubObject("ActivePresentation")->querySubObject("SlideShowSettings")->dynamicCall("Run()");

3.嵌入QWidget 

     //嵌入QWidget
     int index = filePath.lastIndexOf("/");
     QString filename =filePath.mid(index+1,filePath.length());
     QList<HWND> hwndList = GetWindowHandleListByPID(filename);//根据PPT名字获取进程ID号
     QWindow *pWin = QWindow::fromWinId((WId)hwndList.at(0));
     pWin->setGeometry(0,0,this->width(),this->height());
     QWidget *widget = QWidget::createWindowContainer(pWin);
     widget->setMouseTracking(true);//鼠标跟踪
     widget->setParent(this);
QList<HWND> Widget::GetWindowHandleListByPID(QString filename)//通过进程标题获取窗口进程ID
{
    QString str_title = filename+" - WPS Office";//进程标题固定格式
    QList<HWND> HWND_list;
    HWND h = ::GetTopWindow(0);
    while (h)
    {
        DWORD pid = 0;
        DWORD dwTheardId = GetWindowThreadProcessId(h, &pid);

        if (dwTheardId != 0)
        {
            TCHAR *name=new TCHAR[MAX_PATH];
            //::GetClassName(h, name, 255);
            ::GetWindowTextW(h, name, 255);
            QString title = QString :: fromStdWString(name);
            qDebug()<<title;//pp.ppt - WPS Office"  "WPS演示 幻灯片放映 - [pp.ppt]
            if(title == str_title)
            {
                HWND_list.append(h);
            }
        }
        h = ::GetNextWindow(h, GW_HWNDNEXT);
    }
    return HWND_list;//最终只会返回一个进程ID
}

4.

#include <windows.h>
#include <QAxObject>
#include <QMessageBox>
#include <QFileDialog>
#include <QDebug>
#include <QWindow>

5.运行结果-成功嵌入,并可以正常操作ppt

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值