关于QT中的signal 和 slot 中带参数问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于QT中的signal 和 slot 中带参数问题相关的知识,希望对你有一定的参考价值。

关于QT中的signal 和 slot 中带参数问题
比如connect(sender,SIGNAL(a(int)),receiver,SLOT(b(int)))
a中和b中的参数是起什么作用的

.........................
参数的作用 就是传参数,至于参数的意义, qt提供的带参数的single 和 slot 都是 qt团队定义的,你自己的single 和 slot 就是你自己定义的,想代表什么就代表什么了.
参考技术A 由你决定,就是一般的函数的参数,可以没有 参考技术B
用Qt的信号和槽的机制,connect(&button,SIGNAL(clicked()),&textEdit,SLOT(clear()));
其实你用Qt designer设计器更好实现,在界面控件拖放好后,在页面空白处右击,选择Edit SIgnal/Slot选项,此时你把鼠标放在按钮上显示红色,你从界面空白处按下鼠标别放拖到textEdit框上后释放,系统弹出选择信号和响应的槽(注:此时按钮为sender,textEdit为recevier,记住先按下时所对应的控件为sender,鼠标释放时对应的那个控件为receiver).此时可以在左边的框选择clicked,接着在右边的框选择clear,接着在鼠标右击选择 prive in预览命令检验一下。
参考技术C 自己编写的两个函数里面的参数要看你自己要让它实现什么功能咯

Signal和Slot是同步的还是异步的

signal和slot是异步调用还是同步调用,取决于对connect的设定。其实connect还有一个参数(Qt::ConnectionType),是它决定了是同步还是异步。以下是ConnectionType的定义

技术图片

只不过,平常它有一个默认值Qt::AutoConnection,我们忽略了它。这时有道友问道,为何在AutoConnection模式下,有时是同步,有时是异步,莫非Auto就是人品代名词。

非也,其实Auto是这样规定的,

当sender和receiver在同一线程时,就是同步模式,而在不同线程时,则是异步模式。

在Auto模式下,如果sender的触发时所处的线程和receiver不同,也会是异步调用

以上是关于关于QT中的signal 和 slot 中带参数问题的主要内容,如果未能解决你的问题,请参考以下文章

QT 用比 SLOT 更少的参数连接一个 SIGNAL

QT 中 关键字讲解(emit,signal,slot)

Qt - SIGNAL & SLOT 没有从工人阶级更新我在主窗口中的 QLabel

Signal和Slot是同步的还是异步的

深入了解Qt之元signal和slot

Qt中连接到同一signal的多个slots的执行顺序问题(4.6以后按连接顺序执行)