社区
Qt
帖子详情
Qt的事件-槽与C#的事件委托有点类似吧
JHJJHJ4A554E
2010-06-17 03:57:37
rt,前些天看了看c#,感觉两者好像有点类似?
兄弟们讨论讨论。
...全文
1162
14
打赏
收藏
Qt的事件-槽与C#的事件委托有点类似吧
rt,前些天看了看c#,感觉两者好像有点类似? 兄弟们讨论讨论。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
longl215
2010-08-17
打赏
举报
回复
路过学习!
chenyz_cn
2010-08-09
打赏
举报
回复
[Quote=引用 7 楼 tingsking18 的回复:]
大致看了一下委托的实现:
Qt中定义了Q_OBJECT后,会为每个这样的类生成一个moc信息,有一个编号,和这个编号对应的signal或者slot的名称。connect的时候就把调用哪个slot的编号确定下来,同时检查slot的函数签名是否一致,从来实现所谓的“类型安全”,然后在触发slot的时候,会根据这个编号,来调用相应的方法。
委托,就是包装的函数指针,在创建委托的时候,会把函数名称和……
[/Quote]
分析得有道理
中才德创
2010-07-10
打赏
举报
回复
在想用的时候,连连通通就可。真是方便实用。
乐儿爷
2010-07-03
打赏
举报
回复
qt的信号槽其实是moc提前编译了一下。
让我们使用起来看起来跟c#的委托差不多的一个意思。
主要的目的就是松耦合的在任意的地方可以connect disconnect
其实都是observer模式啦。
qt的signal slots很方便。
JHJJHJ4A554E
2010-07-03
打赏
举报
回复
用起来确实很方便,也很灵活
中才德创
2010-06-30
打赏
举报
回复
还是delphi做得方便些。
JHJJHJ4A554E
2010-06-21
打赏
举报
回复
原来看.net的时候,事件委托有些看不明白,学了qt发现事件委托能看明白些了,呵呵
JHJJHJ4A554E
2010-06-18
打赏
举报
回复
信号与槽好像不仅仅是ls说的那么简单吧
devbean
2010-06-18
打赏
举报
回复
信号槽貌似只是用宏做的一个连接,看看源代码发现,那两个宏相当于建了一个 map,把信号和槽连接起来,所谓的 emit 信号,其实就是去查找 map 找到对应的 slot 函数并且调用。
tingsking18
2010-06-18
打赏
举报
回复
大致看了一下委托的实现:
Qt中定义了Q_OBJECT后,会为每个这样的类生成一个moc信息,有一个编号,和这个编号对应的signal或者slot的名称。connect的时候就把调用哪个slot的编号确定下来,同时检查slot的函数签名是否一致,从来实现所谓的“类型安全”,然后在触发slot的时候,会根据这个编号,来调用相应的方法。
委托,就是包装的函数指针,在创建委托的时候,会把函数名称和函数指针在内部对应起来,clr根据函数名称来确定传入委托的函数指针是否是类型安全的。然后根据函数指针来调用函数。然后MS有扩展了编译器,搞出了2.0中的扩展方法,3.5里面的lambda expression这些花里胡哨的东西,其实实质都是一样的,实例化一个委托。
tingsking18
2010-06-18
打赏
举报
回复
类似,实现机制也差不多。
等我有时间读读sscli,看看委托底层是这么实现的。
allyez
2010-06-17
打赏
举报
回复
qt的信号槽机制,其实就是“delphi双击控件,然后写过程、函数”这个操作,只不过delphi用简单的双击代替,而qt要手写代码来连接~
goodluckyxl
2010-06-17
打赏
举报
回复
就是GLIB 中signalconnect一套吧
具体我也说不清楚 真好也是正在看源码
看看signal怎么实现的
回头具体弄清楚了 切磋切磋
不过这个设计方法非常好
可以绕开很多不必要的层次
lxkjlzz
2010-06-17
打赏
举报
回复
MFC的消息机制
Qt
的
事件
-
槽
与
C#
的
事件
委托
类似
Qt
中定义了Q_OBJECT后,会为每个这样的类生成一个moc信息,有一个编号,和这个编号对应的signal或者slot的名称。connect的时候就把调用哪个slot的编号确定下来,同时检查slot的函数签名是否一致,从来实现所谓的“类型安全”,然后在触发slot的时候,会根据这个编号,来调用相应的方法。 委托,就是包装的函数指针,在创建委托的时候,会把函数名称和函数指针在内部对应起来,clr根据函数名称来确定传入委托的函数指针是否是类型安全的。然后根据函数指针来调用函数。然后MS有扩展了编译器,搞出了2
C#
事件
与委托的区别
委托和
事件
虽然有密切的联系,但它们在概念、使用目的、访问控制和生命周期等方面都有明显的区别,合理地使用它们可以让
C#
程序的结构更加清晰、灵活并且安全。
Qt
/ C++ 中实现
类似
C#
中的“委托”
但有三套等价机制: class Worker : public QObject { Q_OBJECT public: explicit Worker(QObject* parent = nullptr); void doWork(); signals: void dataArrived(const QString& msg); }; void Worker::doWork() { emit dataArrived("Hello from Worker"); } Worker* work
【项目三】C++实现
事件
委托
前几天在学习设计模式中的观察者模式时发现需要用到一个十分巧妙的机制——
事件
委托
,
事件
委托
的匿名属性,可以使得通知者对象更新观察者对象时不需要依赖具体名称的函数,是一种降低系统耦合度的设计。我看的设计模式书是《大话设计模式》,里面使用
C#
举例的,
C#
中就有
事件
委托
的机制,而我是学C++,无奈C++中没有
事件
委托
的设计,虽然
Qt
中有
类似
的机制——信号与
槽
,但是总感觉技术不如掌握在自己手中好,索性自己了解并编写一套
事件
委托
系统
C++ - 使用标准库实现
事件
和委托,信号和
槽
机制
在本文中,我们对.Net的
事件
和委托,
Qt
的信号和
槽
进行了简单的介绍,然后通过引入Duilib中对于
事件
和委托的简单实现,进而扩展了自定义的简单
事件
类Event,此类实现的比较简单,但是包含了
事件
实践的核心思想,自己对于模板类,以及变参模板的使用又有了新的体会。
Qt
21,503
社区成员
26,693
社区内容
发帖
与我相关
我的任务
Qt
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
复制链接
扫一扫
分享
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章