8种方式完成信号与槽的建立方式
1、ui界面下按f4转入信号槽设计状态,拖动图标完成,f3退出信号槽设计状态。
信号和槽在系统内就建立了关联。
2、ui界面signal slots edit方式,ui操作
信号和槽在系统内就建立了关联
3、ui界面下右击图标,选择转到槽,进行编辑。
会定位到自动生成的槽中,很方便建立信号与槽连接,需要在.h文件生成的类中建立槽函数声明:private slots: 来存放函数声明。
4,最常规的用法,宏的用法,qt4下使用,现在不推荐,因为检查的方式不严格。
connect(ui->cleal,SIGNAL(clicked()),this,SLOT(Clear_Display()));
5、qt5后的新方法,明确指向信号函数地址和槽函数地址,在编译时要做类型检查,防止错误
connect(ui->cleal,&QPushButton::clicked,this, &Widget::Clear_Display);
括号内“cleal”是发送信号的对象,类为QPushButton,触发方式为点击;“this”接收信号的对象,它后边的是要执行的槽。
6、手动提交一个函数,可以带入口函数,槽函数对入口变量进行响应。
1、通过下方的emit 获取信号,对Display_lcd进行修改
connect(this,&Widget::send_value,this,&Widget::Display_lcd);
2、发送信号
void Widget::on_in1_clicked()
{
emit send_value(1);
}
7、connect()函数基于函数指针的重载形式(非重点)
当信号或槽中有重载时,使用函数指针可以明确告诉编译器使用哪一个重载函数,避免歧义
8、lanbda函数
使用 Lambda表达式的好处是代码的书写更加方便快捷。在connect 函数中,槽函数参数我们可以改用Lambda表达式的方式来进行传参。
connect(ui->injia,&QPushButton::clicked,this,
[=]{
flag = add;
});
[=]表示值传递方式捕捉所有父作用域的变量(包括this) ;