bbabba |
2015-11-18 10:10 |
请帮忙,带MFC的event机制的代码如何成功的转成pyqt的程序
这个问题困扰比较久,特发帖请大家帮忙,如果能够帮忙解决问题,可以酬谢,另外也很高兴认识新的pyqt的朋友。
Windows中有message与event的概念,差别在于 BEGIN_EVENTSINK_MAP是应用于COM组件的事件链接点的,捕获事件产生消息 BEGIN_MESSAGE_MAP是应用于窗口的消息循环的,捕获消息,执行响应函数
问题的背景: 一,有一个COM架构带event的东东(Teststand),要从mfc的代码转为pyqt实现。目前手上有mfc的源代码,使用了自定义的事件。 比如MFC中有些event, 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) 二,因为整个项目要在python+pyqt的环境下实现,想把这些event事件用pyqt的方式来实现。一种方案A说是用signal/slot的方式来模仿mfc的代码。一种方案B说是用winEventFilter() 再加ctypes处理windows函数来模仿mfc的代码。 三,关于方案A,用pyqt去查询它的event,出现了如下的提示: 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))); pyqt把mfc的event用signal来表示。 四,弄到这里,彻底被搞晕了。因为pyqt的signal里面没有见到这么复杂的写法,比如带了一个IDispatch*的参数,这在pyqt的代码中要如何表示呢? 因此还是希望请有带MFC的消息机制的代码成功的转成pyqt的程序的高手帮忙看一下。
|
|