QT GUI界面中集成VISIO绘图区详细说明
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绘图区详细说明相关推荐
- GUI程序中的Matplotlib绘图
1.示例程序和运行效果 一般的书上介绍Matplotlib的绘图功能都主要是介绍matplotlib.pyplot模块中的指令式绘图功能,因为这种方式与MATLAB很相似,使用过MATLAB的人转而使 ...
- matlab中gui界面如何保存为图片,如何保存MATLAB GUI界面中的图片
如何保存MATLAB GUI界面中的图片 代码来源自网络,作者未知,侵删. 原生支持png,bmp,jpg格式.另外自行添加了清晰度比较高的eps格式(荐). 新建一个按钮,按钮的代码如下. 其中第二 ...
- java GUI开发中关于卡片式布局详细步骤讲解
java GUI开发中关于卡片式布局详细步骤讲解 JFrame frame = new JFrame("调课");//首先要申明一个JFrame. JPanel p1 = new ...
- Word中打开Visio绘图错误:找不到服务器应用程序、源文件或项目
错误描述 Word中按Alt+单击鼠标打开Visio绘图时出现错误:找不到服务器应用程序.源文件或项目- 选中绘图后左下角显示Unknown 解决方案 简单解决方法 将Word文件后缀.doc或者.d ...
- kali的Ettercap(0.8.3.1)GUI界面中文化
前言:最近在学kali,学到了dns劫持,上的课老师也是讲了一部分功能,我在网上想找一下别的功能,却发现这个Ettercap居然是20年新版,并没有什么详细信息,我就心血来潮写这篇笔记,让自己以后在复 ...
- QT学习-界面中实时绘制函数图像
通过重写QT中QWidget类中的paintEvent函数,我们就可以做到在widget中进行函数图像的绘制.(我使用的是QCreator的UI设计器) 首先我们需要从QWidget继承一个子类,并重 ...
- 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 ...
- C语言实现中国象棋(Qt实现界面,源码下载,详细注释,易移植)
前言:中国象棋的规则很多人都懂,用C语言做一个中国象棋游戏,其要点是怎么把抽象的规则变成形象.具体的代码.本项目提供详细的实现思路,源码附带大量的注释说明,源码逐步地实现了每一种棋类的走棋规则.吃棋规 ...
- QT界面中实现视频帧显示的多种方法及应用
QT界面中实现视频帧显示的多种方法及应用 (一) 引言 1.1 视频帧在QT界面中的应用场景 1.2 不同方法的性能和适用性分析 1.2.1 使用QLabel和QPixmap 1.2.2 使用QPai ...
- MATLAB中GUI界面开发上位机
MATLAB是一个十分强大的工具,用来制作串口上位机也是不错的选择.虽然一般的上位机是用的C#或者C++编写的,这两者具有强大的系统操作能力或便捷灵活的通信和控制开发能力.但是对于我这种偏硬小白,ma ...
最新文章
- 刚盈利的DeepMind收购MuJoCo:转手开源,所有人免费用
- Mozilla 宣布引入二步认证
- UIUC同学Jia-Bin Huang收集的计算机视觉代码合集
- Java的char数据类型存储一个中文字符
- 继鼎晖夹层完成80亿募集后,鼎晖夹层IDC基金首轮关账15亿
- Intel Realsense D435 多摄像头多线程目标识别架构
- zabbix在configure时候遇到的问题(Ubuntu\debian)
- maven报错解决: -source 1.5 中不支持 diamond 运算符
- 获取SAP Spartacus当前显示产品json数据的又一办法
- 根据年份-月份,获得此月份的所有日期
- kettle插入更新流程
- solr java浏览器访问_solr解决访问安全
- php毛玻璃,CSS实现毛玻璃透明效果
- Python内置函数之-struct
- StringUtil工具类之去除所有的空白字符
- java excel下拉框_Java设置Excel下拉列表
- Cloudera(CDH) 简介和在线安装
- python编程入门与案例详解-quot;Python小屋”免费资源汇总(截至2018年11月28日)...
- FAQ04【ElastiSearch】报错:org.elasticsearch.discovery.MasterNotDiscoveredException异常解决
- Leetcode刷题149. 直线上最多的点数