查看完整版本: [-- 请帮忙,带MFC的event机制的代码如何成功的转成pyqt的程序 --]

QTCN开发网 -> 《C++ GUI Qt 4编程》(第2版)专栏 -> 请帮忙,带MFC的event机制的代码如何成功的转成pyqt的程序 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

bbabba 2015-11-18 10:10

请帮忙,带MFC的event机制的代码如何成功的转成pyqt的程序

这个问题困扰比较久,特发帖请大家帮忙,如果能够帮忙解决问题,可以酬谢,另外也很高兴认识新的pyqt的朋友。

Windows中有messageevent的概念,差别在于
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的程序的高手帮忙看一下。



挽手叙旧 2016-05-20 12:30
我是一楼,我坐沙发,楼下抢板凳

csgaokun 2017-02-08 11:21
我就是抢个板凳


查看完整版本: [-- 请帮忙,带MFC的event机制的代码如何成功的转成pyqt的程序 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled