Qt学习笔记5-信号槽机制

本文深入探讨了Qt的信号槽机制,介绍了如何利用这一机制在对象间传递消息,包括信号与槽的基本概念、关联方式及注意事项等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以《C++ GUI Programming with Qt 4, Second Edition》为参考

前几节提到过信号槽,此次来深入了解一下信号槽机制。

信号槽机制是Qt的一个基础,它使得程序员把一些对象绑定在一起,而对象之间无需知道他们的详细信息。

槽类似于C++中的成员函数,可以是虚拟的,可被重载,可声明为procted,private,public,可以像普通C++那样调用,参数可以是任何类型等。而唯一的不同就是槽可以与信号关联。

当某个事件发生时,通过发送信号,将与之关联的槽函数激活,执行槽代码。使用QObject::connect()将信号与槽进行关联。

connect()语句格式:

connect(sedner,SIGNAL(signal),receiver,SLOT(slot));

其中sender和receiver是QObject指针,signal和slot是参数名。

信号与槽关联的几种方式:

1.一个信号多个槽:

connect(slider, SIGNAL(valueChanged(int)),
        spinBox, SLOT(setValue(int)));
connect(slider, SIGNAL(valueChanged(int)),
        this, SLOT(updateStatusBarIndicator(int)));

当信号发送时,槽会以无序的方式调用

2.多个信号一个槽:

connect(lcd, SIGNAL(overflow()),         this, SLOT(handleMathError())); connect(calculator, SIGNAL(divisionByZero()),         this, SLOT(handleMathError()));
只要有一个信号发送,槽就会被调用
3.一个信号一个槽
4.信号与信号:
connect(lineEdit, SIGNAL(textChanged(const QString &)),         this, SIGNAL(updateRecord(const QString &)));
当第一个信号发送时第二个信号也会发送,除此之外与信号槽是一样的。
5.关联可以移除:
disconnect(lcd, SIGNAL(overflow()),            this, SLOT(handleMathError()));
通常这不是必须的,因为在对象删除时Qt会自动删除对象中的所有连接。
注意事项:
1.信号与槽的参数类型必须相同,而且顺序要一致
connect(ftp, SIGNAL(rawCommandReply(int, const QString &)),         this, SLOT(processReply(int, const QString &)));
2.如果信号参数多于槽参数,那么多余的部分会忽略
connect(ftp, SIGNAL(rawCommandReply(int, const QString &)),         this, SLOT(checkErrorCode(int)));
3.如果参数类型不一致,那么在编译或运行时会报错。
4.在类的开始加上Q_OBJECT这个宏,否则编译会出错。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值