日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QT GUI界面中集成VISIO绘图区详细说明

發布時間:2023/12/10 c/c++ 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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绘图区详细说明的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。