一、Qt槽函数四种写法
00:00
1. 第一种Qt4写法
03:30
语法格式:connect(ui->btnOpen, SIGNAL(clicked()), this, SLOT(open()));
历史原因:这是Qt4时期的写法,当时还没有C++11标准
缺点:
使用宏展开方式,编译器无法检查拼写错误
信号或槽函数名写错时不会报错,导致程序无响应
参数写错也无法被编译器发现
现状:一般不推荐使用这种写法
2. 第二种Qt5写法
07:16
语法格式:connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::btnSlot);
改进点:
使用取地址符和类名限定信号和槽
编译器可以检查拼写错误,错误处会显示红色波浪线
参数错误也会被编译器发现
推荐程度:项目中最常用的写法
3. 第三种lambda表达式写法
09:09
语法格式:connect(ui->btnOpen, &QPushButton::clicked, [=](){...});
特点:
适用于槽函数代码较少的逻辑
需要捕获上下文对象(如[=])
不会调用原有的槽函数,直接执行lambda内的代码
使用场景:适合简单逻辑,代码量少的情况
4. 第四种牵线法
10:12
操作方法:
在Qt Designer中选中控件
点击工具栏"Signals & Slots Editor"
连接信号和槽
缺点:
界面控件多时连线混乱
不适合跨线程或跨多层界面通信
维护困难
现状:实际开发中很少使用
5. 第五种命名规则写法
语法规则:on_控件名_信号名()
特点:
函数名必须严格按此格式命名
参数必须与信号保持一致或更少
Qt会自动连接这些符合命名规则的槽函数
使用场景:
常用于按钮点击等简单交互
菜单项触发等场景
示例:
按钮点击:on_btnOpen_clicked()
菜单退出:on_actionExit_triggered()
参数规则:
槽函数参数可以比信号参数少
但不能比信号参数多
参数类型必须匹配
错误示例:
信号:triggered(bool)
错误槽:on_actionExit_triggered(int)(参数类型不匹配)