当前位置: 首页 > news >正文

Qt笔记 信号和槽

在Qt中,如何将两个对象进行关联,让一个对象发出信号,然后另外一个对象接收到信号后,执行该对象的一个方法,要实现这种方式,则需要使用到信号和槽机制。

信号:

信号一定是一个没有返回值的函数,但是参数可以声明为有,也可以声明为没有。而且信号不需要实现只需要其类中进行声明。可以认为信号不是一个函数,而是一个函数的声明。

如:

class A : public QObject
{Q_OBJECT
public:// ...signals:void Asignal();// ...
};

在定义信号和槽相关的类的时候,有几点是需要注意的:

1. 首先要想使用信号和槽,必须要从QObject来进行派生,因为只有QObject类以及其子类才能包含有信号和槽。

2. 必须包含有Q_OBJECT

槽:

槽是一个实实在在的函数,既要进行声明也要实现,这点上和c++中常规的函数没有什么区别,但是槽的返回值一定void类型,槽可以有参数,参数的类型和数量完全取决于你的需求,槽对参数并没有限制。

如:

class MyClass : public QObject
{Q_OBJECT
public:// ...public slots:void mySlot(int parameter1, QString parameter2);// ...
};// 在cpp文件中
void MyClass::mySlot(int parameter1, QString parameter2)
{// 槽的实现
}

信号和槽如何配合使用?

我们使用使用connect来将发生者,发送的信号,接收者,接收后进行的动作绑定在一起,在connect中的实现即为:

connect(sender, signal, recipient, fuction);

其中的所有参数都是地址,不要搞错了。

举个例子:
 

connect(ui->pushButton, &QPushButton::clicked, this, &widget::close);
//这里是使用Qt中默认的信号和信号槽来实现绑定

这样就可以实现点击ui文件中的pushButton,生成一个clicked点击信号,然后widget界面接收到该信号,执行close方法。

其中的widget中的私有成员指针ui指向ui文件生成的界面,这个界面对应的代码中的组件都是以指针的方式存在。

我们知道c++不能使用像“类::成员函数”这样的方式来获得成员函数的地址,因此可以再前面加一个&作为标记符(而不是取地址的意思),来告诉编译器,这个是一个成员函数的地址,这样才能让编译器来获得正确的成员函数地址。

如何自定义信号和信号槽?

1. 在ui界面实现组件转到槽

这样会直接在widget中生成一个信号槽,且该按钮直接关联到该信号槽,点击即可出发信号槽。

2. 如果信号所在的类无法直接发出信号,则在组件跳转槽中抛出一个连接好的信号槽所需的信号,从而实现间接连接信号和信号槽

http://www.lryc.cn/news/320937.html

相关文章:

  • 后端配置拦截器的一个问题【问题】
  • C++提高笔记(六)---STL函数对象、STL常用算法(遍历、查找)
  • 【每日一问】手机如何开启USB调试?
  • Java映射知识点(含面试大厂题含源码)
  • 拆解Spring boot:Springboot为什么如此丝滑而简单?源码剖析解读自动装配
  • 中国银行信息系统应用架构发展历程
  • 掌握Go语言:探索Go语言指针,解锁高效内存操作与动态数据结构的奥秘(19)
  • 大数据面试题 —— Zookeeper
  • 【安全类书籍-6】僵尸网络:网络程序杀手
  • 文件的创建与删除
  • 图论题目集一(代码 注解)
  • 解释MVC和MVVM架构模式
  • OLLAMA:如何像云端一样运行本地大语言模型
  • React全家桶及原理解析-lesson4-Redux
  • 电商api数据接口技术开发来赞达lazada通过商品ID抓取商品详情信息item_get请求key接入演示
  • 零基础入门多媒体音频(2)-音频焦点2
  • Spark杂谈
  • 【PyTorch】进阶学习:一文详细介绍 torch.save() 的应用场景、实战代码示例
  • 私域流量运营的关键要素和基本步骤
  • k8s部署hadoop
  • deepspeed分布式训练在pytorch 扩展(PyTorch extensions)卡住
  • Rust 的 HashMap
  • exporter方式监控达梦数据库
  • 供应链安全之被忽略的软件质量管理平台安全
  • python入门(二)
  • Mysql,MongoDB,Redis的横纵向对比
  • css3 实现html样式蛇形布局
  • 基于消失点的相机自标定
  • Python:filter过滤器
  • Python函数学习