• Visual Studio下Qt调用IDL


    一.简单介绍:

    1.ActiveQt包含QAxContainer和QAxServer组件。

      1) QAxContainer允许使用COM对象,并且可以将ActiveX控件嵌入到Qt程序中去。

        QAxContainer是有三个类组成的。分别是:

        QAxObject封装了COM对象

        QAxWidget封装了ActiveX控件

        QAxBase是QAxObject和QAxWidget的父类,它实现了封装COM的核心函数。

        通过调用QAxWidget的property()方法和SetProperty方法可以获取和设置ActiveX控件的属性。

        调用ActiveX控件的方法属性需要COM中的数据类型和Qt中的数据类型的转换。COM中数据类型和Qt中的数据类型对应的表格:

         

      2) QAxServer可以将我们写的Qt控件导出为COM对象或者是ActiveX控件。

      3)一个简单例子:

        #include <QApplication>
    
        #include <QtGui>
    
        #include <QAxWidget>
    
        int main(int argc, char *argv[])
    
        {
    
            QApplication a(argc, argv);
    
          QAxWidget *flash = new QAxWidget(0,0);
    
            flash->resize(500,80);
    
            flash->setControl(QString::fromUtf8("{d27cdb6e-ae6d-11cf-96b8-444553540000}"));
    
            flash->dynamicCall("LoadMovie(long,string)",0,"F:/1.swf");
    
            flash->show();
    
       
    
            return a.exec();
    
        }
    

      

    二.方法

    1.首先在windows中注册idldrawx3.ocx

      进入cmd,输入以下命令:(注意后面的路径要带双引号)

      regsvr32  “C:Program FilesITTIDLIDL81inin.x86idldrawx3.ocx”

    2.Qt中调用ActiveX:

      1)通过Qt设计师将 QAxWidget放到界面上;

      2)右键->设置控件;

      3)选择系统中注册的ActiveX控件IDLDrawWidget Control 3.0;

      4)如果工程中没有添加ActiveQt支持,可以通过Qt->Qt Project Settings->Qt Modules 然后勾选ActiveQt container支持;如果是Qt Creator 工程,则需要在.pro文件中
        添加: CONFIG  += qaxcontainer  

    3. ActiveX中接口的调用,通过dynamicCall()实现;

      dynamicCall()最多传递八个QVariant类型的参数,并且返回类型也是QVariant。

  • 相关阅读:
    K-means聚类算法
    实现计算出用户间的共同好友和二度好友
    Mysql和Hive实现列转行,类似reduceByKey操作
    Flink两阶段提交概述
    一些推荐算法的面试题
    收藏推荐算法-机器学习相关博客文章
    Notepad++将多行数据合并成一行
    布隆过滤器
    二叉树问题
    海量数据常见面试问题
  • 原文地址:https://www.cnblogs.com/striver-zhu/p/4652203.html
Copyright © 2020-2023  润新知