3、信号与槽
connect(&对象,&对象类型::信号,&对象,&对象类型::槽函数)
如:connect(&b1,&QPushButton::pressed,this,&MyWidget::close); //都是取地址,this是指针,直接指向地址
1、信号:signals关键字。
2、槽函数:类中任意成员函数,静态函数、全局函数、lambda表达式等。
3、信号、槽,没有返回值,可以有参数。参数列表顺序必须一致,信号参数个数≥槽参数个数。
4、信号、槽连接,可以一对一、一对多、多对一。信号也可以连接信号。连接成功后,可以断开disconnect。
5、一个信号连接多个槽函数时,槽函数的执行顺序随机不可控。
举例:按钮b1,关闭窗体。按钮b2,改变自身文本、隐藏b1
新建项目,QWidget类,不勾选ui
头文件:
#ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> #include <QPushButton> //引入按钮 class MyWidget : public QWidget { Q_OBJECT public: MyWidget(QWidget *parent = 0); ~MyWidget(); void mySlot(); //自定义的槽函数 private: QPushButton b1; //创建对象 QPushButton *b2; }; #endif // MYWIDGET_H
源文件:
#include "mywidget.h" MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { b1.setParent(this);//指定父对象,方法一 b1.setText("按钮1"); b1.move(100,100); //指定父对象,方法二 b2=new QPushButton(this); //指针需要动态分配空间 b2->setText("按钮2"); //信号、槽(系统再带的函数) connect(&b1,&QPushButton::pressed,this,&MyWidget::close);//b1按下,关闭窗体 //信号、槽(自定义的函数) connect(b2,&QPushButton::pressed,this,&MyWidget::mySlot);//b2按下,b2内容改变 connect(b2,&QPushButton::released,&b1,&QPushButton::hide);//b2抬起,b1隐藏 } void MyWidget::mySlot()//自定义的槽函数 { b2->setText("被更改"); } MyWidget::~MyWidget() { }
主程序:
#include "mywidget.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MyWidget w;//执行MyWidget类内的程序 w.show(); return a.exec(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界