一,二,三是背景介绍,四,五是需求。
一,用QAxBase::generateDocumentation()功能生成了ActiveX控件的reference,片段如下:
============================================================================
[b][u]Signals:[/u][/b]
void DisplayExecution(IDispatch* exec, ExecutionDisplayReasons reason);
void ExitApplication();
void DisplaySequenceFile(IDispatch* file, SequenceFileDisplayReasons reason);
void ExitApplication () [signal]
Connect a slot to this signal:
QObject::connect(object, SIGNAL(ExitApplication()), receiver, SLOT(someSlot()));
void DisplayExecution (IDispatch* exec, ExecutionDisplayReasons reason) [signal]
Connect a slot to this signal:
QObject::connect(object, SIGNAL(DisplayExecution(IDispatch*, ExecutionDisplayReasons)), receiver, SLOT(someSlot(IDispatch*, ExecutionDisplayReasons)));
void DisplaySequenceFile (IDispatch* file, SequenceFileDisplayReasons reason) [signal]
Connect a slot to this signal:
QObject::connect(object, SIGNAL(DisplaySequenceFile(IDispatch*, SequenceFileDisplayReasons)), receiver, SLOT(someSlot(IDispatch*, SequenceFileDisplayReasons)));
============================================================================
二,在这个ActiveX控件中原生的说明文档中,对应的片段如下:
[u][b]Events[/b][/u]
DisplaySequenceFile Event
Syntax
ControlName_DisplaySequenceFile ( file, reason)
DisplayExecution Event
Syntax
ControlName_DisplayExecution ( exec, reason)
============================================================================
三,在MFC中对应的代码如下:
BEGIN_EVENTSINK_MAP(CTestExecDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CTestExecDlg)
ON_EVENT(CTestExecDlg, IDC_APPLICATIONMGR, 1 /* ExitApplication */, OnExitApplication_ApplicationMgr, VTS_NONE)
ON_EVENT(CTestExecDlg, IDC_APPLICATIONMGR, 10 /* Wait */, OnWait_ApplicationMgr, VTS_BOOL)
ON_EVENT(CTestExecDlg, IDC_APPLICATIONMGR, 11 /* HandleError */, OnHandleError_ApplicationMgr, VTS_I4 VTS_BSTR)
ON_EVENT(CTestExecDlg, IDC_APPLICATIONMGR, 22 /* DisplayExecution */, OnDisplayExecutionApplicationMgr, VTS_DISPATCH VTS_I4)
ON_EVENT(CTestExecDlg, IDC_APPLICATIONMGR, 21 /* DisplaySequenceFile */, OnDisplaySequenceFileApplicationMgr, VTS_DISPATCH VTS_I4)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
============================================================================
四,目前的需求是,在pyqt中实现类似MFC这段代码的功能,按ActiveX控件供应商的话来说就是create ActiveX event handlers就可以了。不知道在pyqt中如何进行create ActiveX event handlers。根据第一段生成的reference,似乎是可以用pyqt的signal/slot的机制来create ActiveX event handlers(对应mfc的eventsink map那段的代码),但是不知道代码要如何写:
QObject::connect(object, SIGNAL(DisplayExecution(IDispatch*, ExecutionDisplayReasons)), receiver, SLOT(someSlot(IDispatch*, ExecutionDisplayReasons)))
多谢大家啦。