1.背景

项目需要在界面中集成VISIO的工作区,就开始研究这个问题,本以为是一个非常简单的问题,找到工作区窗口,调用SetParent接口就好了。但是实际操作中发现这个思路是行不通的。

这种方法,在WIN7操作系统中,32为VISIO可以集成,正常操作也没有问题。但是在其他配置的情况下就不行了,比如WIN10。

用QT的QWidget的接口函数也是同样的情况。

昨天,偶然间在微软官网发现VISIO的工作区实际是一个ActiveX控件,那就简单了。需要Qt中的axcontainer模块就能搞定。

2.过程

首先用Creator新建一个GUI的工程。

修改pro文件,添加

QT += axcontainer,引入这个模块。

在UI文件中添加一个QAxWidget控件。

在控件中右键点击,选择【设置控件】会出现如下界面

在这个界面中能找到 VISIO绘图控件。

再在这个控件中添加槽函数,右键单击控件,选择【转到槽】。就出现下面的界面。Creator会自动生成槽函数的。

3、控件的接口函数调用方法。

这个是我想说的最重要的部分,照我的理解大致是有三种方法。

第一种方法,也是QT帮助文件中的方法。

QAxWidget::dynamicCall("SetSrc (QString Src)",params)//接口函数调用
QAxWidget::setProperty("Src",params)//设置属性的值
QAxWidget::property("Src")//得到属性的值

这种方法对于一些不支持的数据类型是不支持的。也就是可能某一些方法会调用失败。

第二种方法,也是QT帮助中的办法,利用bumpcpp生成.h和.cpp文件。直接在工程中引用。但是我在试验的时候发现,生成的类型是QAxObject,我理解应该是QAxWidget所以这种办法没有试成功。

第三种办法,应该是最理想的办法,但是过程稍微有点麻烦。

首先,用VS生成一个空的win32控制台程序,然后添加一个cpp文件,在文件中加上如下代码。

#import "C:\\visio\\Office14\\VISLIB.DLL"#import "C:\\visio\\Office14\\VISOCX.DLL"void main()
{}

然后直接编译就可以了。

编译完成后,在debug文件夹中会出现如下4个文件

这4个文件中tlh实际是头文件,tli应该就是cpp文件。

把这4个文件加入到我们的工程中,我们就可以使用全部的接口了。

ui->axWidget->setControl("{E4615FA3-23B0-4976-BD3E-D611DDBE330E}");VisOcx::IDrawingControl* drawing;QUuid id = QUuid::fromString(QLatin1String("{9BF6FD73-F05B-406E-B938-09E2B413528E}"));ui->axWidget->queryInterface(id,(void**)&drawing);//得到控件提供的接口_bstr_t host = drawing->GetHostID();drawing->put_Src(_bstr_t("d:\\draw.vsd"));Visio::IVWindowPtr window = drawing->Window;COLORREF color = RGB(255, 0, 0);window->PutBackgroundColor((OLE_COLOR)color);window->PutViewFit(2);

上面是我做的测试的代码。

connect(ui->axWidget, SIGNAL(DocumentChanged(Visio::IVDocument *)), this, SLOT(onDocumentChanged(Visio::IVDocument *)));QObject::connect(ui->axWidget, SIGNAL(MouseMove(int, int, double, double, bool &)), this, SLOT(onMouseMove(int, int, double, double, bool &)));connect(ui->axWidget, SIGNAL(ShapeAdded(struct Visio::IVShape *)), this, SLOT(onShapeAdded(struct Visio::IVShape *)));

这是连接槽函数的代码。

第一次调用ActiveX,第一次做QTGUI程序,成就感满满,希望对后来的诸位能有帮助,也希望我将来还能用到。

QT GUI界面中集成VISIO绘图区详细说明相关推荐

  1. GUI程序中的Matplotlib绘图

    1.示例程序和运行效果 一般的书上介绍Matplotlib的绘图功能都主要是介绍matplotlib.pyplot模块中的指令式绘图功能,因为这种方式与MATLAB很相似,使用过MATLAB的人转而使 ...

  2. matlab中gui界面如何保存为图片,如何保存MATLAB GUI界面中的图片

    如何保存MATLAB GUI界面中的图片 代码来源自网络,作者未知,侵删. 原生支持png,bmp,jpg格式.另外自行添加了清晰度比较高的eps格式(荐). 新建一个按钮,按钮的代码如下. 其中第二 ...

  3. java GUI开发中关于卡片式布局详细步骤讲解

    java GUI开发中关于卡片式布局详细步骤讲解 JFrame frame = new JFrame("调课");//首先要申明一个JFrame. JPanel p1 = new ...

  4. Word中打开Visio绘图错误:找不到服务器应用程序、源文件或项目

    错误描述 Word中按Alt+单击鼠标打开Visio绘图时出现错误:找不到服务器应用程序.源文件或项目- 选中绘图后左下角显示Unknown 解决方案 简单解决方法 将Word文件后缀.doc或者.d ...

  5. kali的Ettercap(0.8.3.1)GUI界面中文化

    前言:最近在学kali,学到了dns劫持,上的课老师也是讲了一部分功能,我在网上想找一下别的功能,却发现这个Ettercap居然是20年新版,并没有什么详细信息,我就心血来潮写这篇笔记,让自己以后在复 ...

  6. QT学习-界面中实时绘制函数图像

    通过重写QT中QWidget类中的paintEvent函数,我们就可以做到在widget中进行函数图像的绘制.(我使用的是QCreator的UI设计器) 首先我们需要从QWidget继承一个子类,并重 ...

  7. Pycharm远程调试Qt GUI界面,报错Could not connect to any X display.

    qt.qpa.screen: QXcbConnection: Could not connect to display  Could not connect to any X display. 方案1 ...

  8. C语言实现中国象棋(Qt实现界面,源码下载,详细注释,易移植)

    前言:中国象棋的规则很多人都懂,用C语言做一个中国象棋游戏,其要点是怎么把抽象的规则变成形象.具体的代码.本项目提供详细的实现思路,源码附带大量的注释说明,源码逐步地实现了每一种棋类的走棋规则.吃棋规 ...

  9. QT界面中实现视频帧显示的多种方法及应用

    QT界面中实现视频帧显示的多种方法及应用 (一) 引言 1.1 视频帧在QT界面中的应用场景 1.2 不同方法的性能和适用性分析 1.2.1 使用QLabel和QPixmap 1.2.2 使用QPai ...

  10. MATLAB中GUI界面开发上位机

    MATLAB是一个十分强大的工具,用来制作串口上位机也是不错的选择.虽然一般的上位机是用的C#或者C++编写的,这两者具有强大的系统操作能力或便捷灵活的通信和控制开发能力.但是对于我这种偏硬小白,ma ...

最新文章

  1. 刚盈利的DeepMind收购MuJoCo:转手开源,所有人免费用
  2. Mozilla 宣布引入二步认证
  3. UIUC同学Jia-Bin Huang收集的计算机视觉代码合集
  4. Java的char数据类型存储一个中文字符
  5. 继鼎晖夹层完成80亿募集后,鼎晖夹层IDC基金首轮关账15亿
  6. Intel Realsense D435 多摄像头多线程目标识别架构
  7. zabbix在configure时候遇到的问题(Ubuntu\debian)
  8. maven报错解决: -source 1.5 中不支持 diamond 运算符
  9. 获取SAP Spartacus当前显示产品json数据的又一办法
  10. 根据年份-月份,获得此月份的所有日期
  11. kettle插入更新流程
  12. solr java浏览器访问_solr解决访问安全
  13. php毛玻璃,CSS实现毛玻璃透明效果
  14. Python内置函数之-struct
  15. StringUtil工具类之去除所有的空白字符
  16. java excel下拉框_Java设置Excel下拉列表
  17. Cloudera(CDH) 简介和在线安装
  18. python编程入门与案例详解-quot;Python小屋”免费资源汇总(截至2018年11月28日)...
  19. FAQ04【ElastiSearch】报错:org.elasticsearch.discovery.MasterNotDiscoveredException异常解决
  20. Leetcode刷题149. 直线上最多的点数

热门文章

  1. ssm三大框架的优缺点
  2. apk反编译 Android apktool下载 dex2jar下载 jd-gui下载
  3. c语言源代码大全迅雷下载,俄罗斯方块C语言源代码
  4. C#实现图像下一张上一张
  5. jedate change事件监控,使用jedate无法使用change事件
  6. Windows虚拟机忘记操作系统密码
  7. java笔试题算法题,吐血整理
  8. 微信浏览器下载APK文件的实现方案
  9. java word搜索_java 实现word 文档的在线编辑. 以及全文关键字搜索和高亮显示
  10. Vue3 JSON编辑器