VS+QT开发Ocx/ActiveX控件 一
VS+QT开发Ocx/ActiveX控件-------网页中全屏 二
一:所用IDE版本,需用管理员权限
IE11
vs2017+qt visual studio tools version 2.9.1
二:创建ActiveX
然后一直next,最后finish
三:qt desinger
放3个组件,这三个组件可以像普通的QT一样进行操作,然后编译成dll。
四:regsvr32.exe注册DLL
-
管理员权限打开CMD
- 使用c:\windows\system32的regsvr32.exe
- 执行
c:\windows\system32\regsvr32.exe ActiveQtServer_test1.dll
- 之后再需要生成dll就需要管理员权限打开vs
注册ocx错误码0x80040200,需要管理员权限cmd注册
五:html
创建html,命名为ac.html
<HTML>
<HEAD>
<TITLE>My Web</TITLE>
</HEAD>
<BODY>
<object ID="ActiveQtServer_test1" classid="CLSID:552ec57c-2d6a-4e8c-b08b-69044335d576" width="600" height="400">
</object>
</BODY>
</HTML>
TITLE:随意
ID:随意
classid:552ec57c-2d6a-4e8c-b08b-69044335d576
width/height:随意NOTE: HTML放到dll同级目录下
六:windeployqt获取dll多需的所有文件
使用QT自带的windeployqt.exe获取dll多需的所有文件
IE打开ac.HTML文件,效果如下:
七 HTML 调用ActiveX方法和变量
1. Qt类中的属性和公有的插槽函数(slots)会被转换为COM中的属性和方法
2. Qt类中的信号(signals)会被转换成为COM组件中的事件
所以添加一个槽函数printffff,这个函数可以被HTML调用
添加一个变量ActiveChannel ,可以被HTML读取
//属性
Q_PROPERTY(int ActiveChannel READ readActiveChannel)
int ActiveChannel = 2;
int readActiveChannel()
{
return ActiveChannel ;
}
//槽函数
public slots:
QString printffff(QString s)
{
ss = s;
ui.lineEdit->setText(ss);
return ss;
}
};
HTML:如下
<HTML>
<HEAD>
<TITLE>My Web</TITLE>
</HEAD>
<BODY>
<object ID="ActiveQtServer_test1" classid="CLSID:552ec57c-2d6a-4e8c-b08b-69044335d576" width="600" height="400">
</object>
<p>
<button name="string" onclick="pushhhh()">push</button>
<button name="getChannel" onclick="pushgetChannel()">push</button>
<p>指定窗口<input type="text" name="activeix"/>
</p>
<script>
function pushhhh(){
ActiveQtServer_test1.printffff("123123");
}
function pushgetChannel(){
activeix.value= ActiveQtServer_test1.ActiveChannel;
alert(activeix.value)
}
</script>
</BODY>
</HTML>
IE打开HTML效果如下:
八 Qt数据类型和等效的COM数据类型之间进行转换。
Qt支持作为COM组件信号和槽函数参数的数据类型如下:
问题:
以管理员权限运行