• 2701阅读
  • 2回复

[提问]请帮忙,带MFC的event机制的代码如何成功的转成pyqt的程序 [复制链接]

上一主题 下一主题
离线bbabba
 

只看楼主 倒序阅读 楼主  发表于: 2015-11-18
这个问题困扰比较久,特发帖请大家帮忙,如果能够帮忙解决问题,可以酬谢,另外也很高兴认识新的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的程序的高手帮忙看一下。


离线挽手叙旧

只看该作者 1楼 发表于: 2016-05-20
我是一楼,我坐沙发,楼下抢板凳
离线csgaokun

只看该作者 2楼 发表于: 2017-02-08
我就是抢个板凳
快速回复
限100 字节
 
上一个 下一个