当前位置: 代码迷 >> QT开发 >> 信号槽与事件是不是完全可以互相替代
  详细解决方案

信号槽与事件是不是完全可以互相替代

热度:328   发布时间:2016-04-25 02:59:24.0
信号槽与事件是否完全可以互相替代?
作为对象间通信的机制.
信号槽与事件虽然有一些细微的差别.
但是在使用上来讲, 有区别吗?

或者说  在什么情况下二者不能互相替代.
------解决思路----------------------
感觉区别不大。只是信号槽用起来方便一些。区别可以看看ConnectionType
------解决思路----------------------
不一样的,有很多区别。
1.信号与槽,在同一线程,类型为直连时,信号发生,槽被调用,相当于直接的函数调用,是同步的;而事件,使用sendEvent时是同步的,使用postEvent则是异步,要等到下一轮事件循环才会被处理。
2.跨线程时,采用队列连接的信号与槽,是通过事件实现的。从这点讲,信号与槽等同于事件,只是信号与槽用起来更方便,事件稍微繁琐。
3.事件一方面是处理用户输入,比如按键,鼠标;一方面可以自定义事件用于对象间通信。无论哪种,都会经过Qt的事件循环。而信号与槽则不一定会经过事件循环。
区别很多,不能一一列举,用着用着就明白了。

------解决思路----------------------
引用:
那你的意思两者到底能不能互换使用? 我怎么看不懂你说的语文呢

文档上只说事件或者信号槽能干什么? 我怎么知道他们不能干什么. 有疑问不是很正常吗?

凳子和椅子都能坐,  但是凳子不能靠. 都是对象通信, 我想知道哪个是凳子哪个是椅子.或者都是凳子,都是椅子.

你说的1, 继承一下, 定义一个事件可以吗? 
你说的2我不知道是什么

我qt学了2天, 有说的不对的地方, 请指教.
其实你可以直接告诉我, 可以或者不可以互换使用


版主在4楼提到的几点都关键(涉及到Qt中很多本质的东西),但是你在5楼说这些你都知道。

可是,你知道完全理解4楼的话意味着什么?意味着你对Qt有很深入的理解,而这种理解,是不可能2天、2周、2个月的时间所能达到的(甚至2年可能都有困难)。

另外:如果你觉得我举得两个例子不合你要求,建议你将该问题完全放下。随着学习的深入,你自然而然会理解:你的困惑是什么,问题该如何表述,答案是什么...
  相关解决方案