Qt学习第三篇(信号槽函数的连接)

打印 上一主题 下一主题

主题 901|帖子 901|积分 2703

信号与槽函数

在 Qt 中,信号(Signals)和槽(Slots)是用于对象间通信的一种机制,是 Qt 中变乱处置处罚和消息传递的重要方式。信号和槽机制使得对象之间的通信更加灵活和方便,同时也实现了很好的解耦。
当某个变乱发生后,如某个按钮被点击了一下,它就会发出一个被点击的信号(signal)。
某个对象接收到这个信号之后,就会做一些相关的处置处罚动作(称为槽slot)。
但是Qt对象不会无故收到某个信号,要想让一个对象收到另一个对象发出的信号,这时间需要建立连接(connect)
在Qt中,有一种回调技术的替代方法:那就是信号和槽机制。当特定变乱发生时,会发出一个信号。Qt的小部件中有许多预定义的信号,但我们可以将小部件子类化,向它们添加自定义的信号。槽是响应特定信号的函数。Qt的小部件有许多预定义的槽函数,但是通常是子类化小部件并添加自己的槽函数,这样就可以处置处罚与之相关联的信号了。如下图所示:

信号和槽用于多个对象之间的通信。信号和槽机制是Qt的焦点特性,也是与其他框架最大的不同之处。Qt的元对象系统是信号和槽实现的基础。
在GUI编程中,当更改一个小部件时,通常盼望另一个小部件得到关照。盼望任何范例的对象都能够相互通信。例如,如果用户单击关闭按钮,可能盼望调用窗口的Close()函数。

这是 Qt 中的 connect 函数的声明,它用于连接信号和槽。让我表明一下每个参数的含义:

  • const typename QtPrivate::FunctionPointer::Object *sender:表现发出信号的对象指针。这里使用了模板元编程的技巧,Func1 是信号函数的范例,QtPrivate::FunctionPointer 用于提取函数指针的对象范例。
  • Func1 signal:表现信号的函数指针。在这里,Func1 代表信号函数的范例,通常是一个成员函数指针,用于指示发出信号的具体函数。
  • Func2 &&slot:表现槽的函数指针。Func2 代表槽函数的范例,通常也是一个成员函数指针。&& 表现这是一个右值引用,用于接收槽函数的参数。
该函数返回一个 QMetaObject::Connection 对象,用于表现信号和槽之间的连接。
总的来说,这个 connect 函数的作用是将一个发出信号的对象(sender)的特定信号(signal)连接到一个槽函数(slot)上。当信号被发出时,与之连接的槽函数会被调用。

像之前的代码就是默认使用的自动连接。
[code]QObject::connect(lineEdit,&QLineEdit::textChanged,[&](){    QString text = lineEdit->text();    qDebug() retType


retType,标识lambda函数返回值的范例。这部分可以省略,但是省略了并不代表函数没有返回值,编译器会自动根据函数体内的return语句判断返回值范例,但是如果有多条return语句,而且返回的范例都不一样,编译会报错
而且使用Lambda表达式作为槽的时间不需要填入信号的接收者。一旦文本被改变,lambda表达式也会直接运行。当然lambda表达式还可以指定函数参数,这样也就能够接收到信号函数传递过来的参数了。由于lambda表达式比我们自己自定义槽函数要方便而且灵活得多,所以在实现槽函数的时间优先考虑使用Lambda表达式。一般我们的使用习惯也是lambda表达式外部函数的局部变量全部通过值传递捕获进来,也就是:[=](){ }的形式

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

三尺非寒

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表