QT学习:信 与槽机制

QT学习:信 与槽机制

  • 概述
  • 信 与槽的关联
  • 实例
    • 编译环境
    • 修改ui文件
    • 连接信 与槽

非计算机专业大四学生自学QT的一点心得,可能有很多地方的表述不够标准或是过于口语化,烦请大家多指正。

Qt是一个跨平台的C++应用程序开发框架。广泛用于开发GUI程序,这种情况下又被称为部件工具箱。也可用于开发非GUI程序,比如控制台工具和服务器。Qt使用标准的C++和特殊的代码生成扩展以及一些宏。通过语言绑定,其他的编程语言也可以使用Qt。Qt是自由且开放源代码的软件,在GNU宽通用公共许可证条款下发布。所有版本都支持广泛的编译器,包括GCC的C++编译器和Visual Studio。

概述

信 和槽机制是 QT 的核心机制,要精通 QT 编程就必须对信 和槽有所了解。信 和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重要地方。信 和槽是 QT 自行定义的一种通信机制,它独立于标准的 C/C++ 语言,因此要正确的处理信 和槽,必须借助一个称为 moc(Meta Object Compiler)的 QT 工具,该工具是一个 C++ 预处理程序,它为高层次的事件处理自动生成所需要的附加代码。
得益于信 与槽机制,当GUI界面中的各种窗口小部件 (widget) 发生某一事件时(鼠标左键按下、滚轮滑动或文本输入框被输入等),由该小部件发出信 ,当该信 被用户与某个槽连接起来时,会自动执行槽函数中的内容。这种机制类似于回调,但是传统的回调函数通常是一个指向某个函数的指针,使用信 与槽机制使得我们的程序更加简洁明了也更加安全。

当某个widget发生某一类相关的事件时,信 被一个对象使用信 发射 (emit) 函数发射,当该信 有被开发者预先与某个槽函数连接过的情况下,立刻执行该槽函数,而后emit函数才返回;若该信 没有被连接过,emit函数立即返回。
信 由moc自动产生,只需要在头文件中进行定义,不应该在.cpp中被开发者具体实现(也就是说,开发者无需关心,为什么用户点击了一个按键后,该按键对象会发出一个按键被按下的信 )。

槽是普通的 C++ 成员函数,可以被正常调用,也可以被所连接的信 调用,槽函数的方法需要开发者在.cpp中实现。

信 与槽的关联

信 与槽通过连接 (connect) 函数相关联,通过该函数,某一对象发射发射信 时.被连接的对象的槽函数将被执行,该函数定义如下:

信 与槽需要满足以下两点中的一点才能够成功被连接:

  • 信 的参数个数与类型与对应的槽函数参数的个数与类型一致。
  • 信 的参数个数多于对应的槽函数的参数个数,即对应的槽函数的参数个数可以比信 函数少,但槽函数的所有参数类型必须与信 的参数类型保持一致。

实例

编译环境

  • Windows 10
  • Qt 5.12.3

修改ui文件

如下图所示,新建一个滑动控件(horizontalSlider)与一个微调框控件(spinBox)。

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年1月5日
下一篇 2020年1月5日

相关推荐