96SEO 2026-02-20 09:30 21
信号和槽机制一、系统自带信号与槽二、自定义信号与槽1.基本使用student.cppteacher.cppwidget.cppmain.cpp

2.信号与槽重载student.cppteacher.cppwidget.cppmain.cpp
所谓信号槽实际就是观察者模式将要处理的信号和自己的一个函数/槽slot绑定来处理信号当某个事件发生之后检测对象就会发出信号无目的的广播如果有其他对象对这个信号感兴趣就会使用connect函数进行连接。
即当信号发出时被连接的槽函数会自动被回调。
类似观察者模式当发生了感兴趣的事件某个操作就会被自动触发。
信号槽的优点松散耦合信号发送方和接收方本身是没有关联的通过connect连接将两端耦合在一起
QPushButton(quit,this);//创建关闭按钮
QWidget::close);//信号槽使用方式函数connect(sender,
sender发出信号的对象signal发送对象发出的信号receiver接收信号的对象slot接收对象在接收到信号之后所需要调用的函数槽函数
利用帮助文档了查找系统自带的信号和槽在帮助文档中如按钮的点击信号输入QPushButton首先我们可以在Contents中寻找关键字
signals信号的意思但是我们发现并没有找到这时候我们应该想到也许这个信号的被父类继承下来的因此我们去他的父类QAbstractButton中就可以找到该关键字点击signals索引到系统自带的信号有如下几个。
这里的clicked就是我们要找到槽函数的寻找方式和信号一样只不过他的关键字是slot。
但Qt的信号槽机制并不仅仅是使用系统提供那部分其还允许开发者设计自己的信号和槽
teacher.hTeacher::Teacher(QObject
ui_widget.hWidget::Widget(QWidget
Widget::classIsOver);//按钮触发classIsOver函数//2.第二次绑定
Student(this);//初始化学生对象connect(tch,
Student::treat);//老师饿了时学生主动请客的connect连接
teacher.hTeacher::Teacher(QObject
ui_widget.hWidget::Widget(QWidget
Widget::classIsOver1);//按钮触发classIsOver函数QPushButton
Widget::classIsOver2);//按钮触发classIsOver函数tch
Student(this);//初始化学生对象//2.第二次绑定
使用自定义信号与槽函数void(Teacher::*tchsignal_)()
Teacher::hungry;void(Student::*stusignal_)()
stusignal_);//老师饿了时学生主动请客的connect连接//3.第三次绑定
用于识别重载的函数地址void(Teacher::*tchsignal)(QString)
Teacher::hungry;void(Student::*stusignal)(QString)
之前的使用中都是利用槽函数实现的点击btn按钮触发函数调用函数调用后emit发出信号再触发slot槽函数从而实现连续的效果。
也可以使用另一种方式信号触发信号完成利用点击btn按钮的信号去触发另一个信号
ui_widget.hWidget::Widget(QWidget
Widget::classIsOver1);//按钮触发classIsOver函数QPushButton
Widget::classIsOver2);//按钮触发classIsOver函数tch
Student(this);//初始化学生对象//2.第二次绑定
使用自定义信号与槽函数void(Teacher::*tchsignal_)()
Teacher::hungry;void(Student::*stusignal_)()
stusignal_);//老师饿了时学生主动请客的connect连接connect(mybtn1,
用于识别重载的函数地址void(Teacher::*tchsignal)(QString)
Teacher::hungry;void(Student::*stusignal)(QString)
tchsignal);//信号连接信号connect(mybtn2,
}btn触发信号连接信号跳过了classIsOver函数的中间调用过程直接实现了最终结果的输出。
C11中的Lambda表达式用于定义并创建匿名的函数对象以简化编程工作Lambda表达式的基本构成
[capture](parameters)mutable-returnType
}函数对象参数[]标识一个Lambda的开始这部分必须存在不能省略。
函数对象参数是传递给编译器自动生成的函数对象类的构造函数的。
函数对象参数只能使用那些到定义Lambda为止时Lambda所在作用范围内可见的局部变量包括Lambda所在类的this。
函数对象参数有以下形式
void没有使用任何函数对象参数。
函数体内可以使用Lambda所在作用范围内所有可见的局部变量包括Lambda所在类的this并且是值传递方式相当于编译器自动为我们按值传递了所有局部变量函数体内可以使用Lambda所在作用范围内所有可见的局部变量包括Lambda所在类的this并且是引用传递方式相当于编译器自动为我们按引用传递了所有局部变量this函数体内可以使用Lambda所在类中的成员变量a将a按值进行传递。
按值进行传递时函数体内不能修改传递进来的a的拷贝因为默认情况下函数是const的。
要修改传递进来的a的拷贝可以添加mutable修饰符a将a按引用进行传递。
a,
操作符的参数没有参数时这部分可以省略。
参数可以通过按值如(a,b)和按引用如(a,b)两种方式进行传递
声明这部分可以省略。
按值传递函数对象参数时加上mutable修饰符后可以修改按值传递进来的拷贝注意是能修改拷贝而不是值本身
10;connect(myBtn,QPushButton::clicked,this,[m]
connect(myBtn2,QPushButton::clicked,this,[]
返回值类型标识函数返回值的类型当返回值为void或者函数体中只有一处return的地方此时编译器可以自动推断出返回值类型时这部分可以省略。
利用Lambda表达式简化信号与槽的使用机制利用lambda表达式实现点击按钮关闭窗口
发送者和接收者都需要是QObject的子类槽函数是全局函数、Lambda
void只需要声明不需要实现可以有参数发生重载槽函数是普通的成员函数需要声明也需要实现会受到
一个信号可以和多个槽函数相连如果是这种情况这些槽会一个接一个的被调用但是它们的调用顺序是不确定的多个信号可以连接到一个槽只要任意一个信号发出这个槽就会被调用一个信号可以连接到另外的一个信号当第一个信号发出时第二个信号被发出除此之外这种信号-信号的形式和信号-槽的形式没有什么区别。
信号槽要求信号和槽的参数类型对应参数的个数信号可以多于槽函数反之报错若信号和槽的参数不一致允许的情况是槽函数的参数可以比信号的少即便如此槽函数存在的那些参数的顺序也必须和信号的前面几个一致起来。
这是因为可以在槽函数中选择忽略信号传来的数据也就是槽函数的参数比信号的少。
槽可以被取消链接这种情况并不经常出现因为当一个对象delete之后Qt自动取消所有连接到这个对象上面的槽使用Lambda
表达式的在连接信号和槽的时候槽函数可以使用Lambda表达式的方式进行处理。
SLOT(treat(QString)));这里使用了SIGNAL和SLOT这两个宏将两个函数名转换成了字符串。
注意到connect函数的signal和slot都是接受字符串一旦出现连接不成功的情况Qt4是没有编译错误的因为一切都是字符串编译期是不检查字符串是否匹配而是在运行时给出错误。
这无疑会增加程序的不稳定性。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback