最近做签章客户端的项目,需要调用外部提供的ocx插件,界面框架为QT。ocx控件QT进行调用没有问题 ,在skipping event interface _XXX_AXEvents 遇到了拦路虎,怎么处理能接收到ocx发出的一些信号呢?因为我有c#调用OCX的源码,可以看到事件的接口参数,QT 的消息机制是信号和槽,所以我就在想,在QT框架内,事件就相当于信号,我只需要根据参数 实现相应的槽函数并与信号连接。结果可行,示例如下:
c#:
public event _DFoxitReader_AXEvents_OnAddSignatureEventHandler OnAddSignature;
axFoxitReader_AX1.OnAddSignature += OnAddSeal;
private void OnAddSeal(object sender, AxFoxitReader_AXLib._DFoxitReader_AXEvents_OnAddSignatureEvent e)
{
if (e.nSignRet == 0)
{
if (fileModified_event != null)
{
fileModified_event();
}
}
else if (e.nSignRet == 1)
{
MessageFrm frm = new MessageFrm("PIN码错误,无法盖章");
frm.StartPosition = FormStartPosition.CenterParent;
frm.ShowDialog(this);
}
else if (e.nSignRet == 2)
{
MessageFrm frm = new MessageFrm("取消了PIN码认证,无法盖章");
frm.StartPosition = FormStartPosition.CenterParent;
frm.ShowDialog(this);
}
else if (e.nSignRet == 3)
{
MessageFrm frm = new MessageFrm("Pin码已被锁,无法盖章");
frm.StartPosition = FormStartPosition.CenterParent;
frm.ShowDialog(this);
}
else if (e.nSignRet == 209727763)
{
}
else
{
MessageFrm frm = new MessageFrm("盖章失败");
frm.StartPosition = FormStartPosition.CenterParent;
frm.ShowDialog(this);
}
因为我想获得盖章后的状态,上面的c#源码处理的事件接口参数是整型数值,所以我大胆判定,信号是带整型参数的的,实现如下:
QObject::connect(foxitReader,SIGNAL(OnAddSignature(int)),this,SLOT(on_AddSignature(int)));
经过测试,结果正确。