直接调用callback的指针,速度快,但耦合性太高,不在UI线程里时操作UI控件要码农自己做同步,忘了做同步就是bug。属于最直接最原始的事件分发的抽象,只有在效率高于一切时才需要考虑用这种。
Qt的signal/slot会自动区分UI线程、非UI线程,解耦当然是没问题的。支持一对多。
Delphi的设计者跑到微软后搞的C#,里面的多播委托也支持一对多。
但是C# WinForms里也是要码农手动区分UI线程、非UI线程的,可以封个无脑函数让调用者无需区分。
C# WPF里对区分UI线程、非UI线程又是另一套搞法。
Objective-C的消息分发和Qt的signal/slot有点类似,但并不完全相同。
我之前发过帖子说了个暴论“现在AI写桌面小工具,PySide是王道”,哈哈。
因为PySide调用的就是Qt,既可以利用Qt的signal/slot和大量的积木widget,也可以利用python的简洁、丰富的库,以及AI对python的语料积累。
我自己用PySide已经写了好几个小工具了,不需要发布出去的,或者不担心被人逆向分析啥的,也不用编译成byte code。
【 在 ooolinux 的大作中提到: 】
: Qt足够强大,类库也堪称好用,但是它为人称道的信号槽连接机制,比起Delphi的事件和事件处理函数就差了几条街了。
: VCL类库中事件就是一个函数指针,自然优美,这得益于Object Pascal语言的特性以及VCL的架构。
: 比如Button1的OnClick事件,被指定了Button1Click事件处理函数之后,当鼠标点击Button1时,经过Windows内核和VCL架构的消息处理与传递,最终调用了Button1Click函数,看起来就是这么简单。
: ...................
--
修改:z16166 FROM 123.115.128.*
FROM 123.115.128.*