当前位置: 首页 > news >正文

Qt中信号与槽的使用

Qt中信号与槽的使用

Qt·当中一个重要的东西是信号和槽,它被用于对象之间的通信。

在Qt中,例如“点击按钮”这个事件就是发送信号的对象,接收信号的是某一个窗口,响应信号的是一个处理,可以是隐藏窗口或者是关闭窗口。响应信号的是槽。

在Qt中,发送对象、发送的信号、接收对象、槽可以通过很多种方式连接。可以是一对一,也可以是一对多。

在Qt 4的版本中,主要通过connect + 宏的方式进行通信连接。

connect(发送对象,信号,接收对象,槽函数),其中发送信号和槽函数需要用 SIGNAL() 和 SLOT() 来进行声明。

比如点击按钮关闭窗口的例子,代码可以这样写:

connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(close()));

如果想自定义槽函数,需要先将槽函数的声明添加到类的slots中。比如我们对一个QLineEdit控件添加一个接收textEdited信号的槽函数onTextEdited

class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void onTextEdited(QString);private:Ui::MainWindow *ui;
};

然后实现函数,并用connect与信号连接

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(close()));    connect(ui->lineEdit, SIGNAL(textEdited(QString)), this, SLOT(onTextEdited(QString)));
}void MainWindow::onTextEdited(QString s)
{qDebug() << s;
}

Qt 5 推出了新的 connect 函数,不需要使用 SIGNAL() 和 SLOT() 宏,可以在编译时做类型检查。

同样用代码实现点击按钮关闭窗口,并且添加一个QLineEdit控件,发送textEdited信号,由onTextChanged()函数作为槽函数响应。

class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();void textChanged(QString);private:Ui::MainWindow *ui;
};

使用 connect 将信号与槽函数连接,不需要再使用 SIGNAL() 和 SLOT() 宏

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::close);connect(ui->lineEdit, &QLineEdit::textEdited, this, &MainWindow::textChanged);
}void MainWindow::textChanged(QString s)
{qDebug() << s;
}

该文章会更新,欢迎大家批评指正。

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,
分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容,点击立即学习:
服务器课程:C++服务器

http://www.lryc.cn/news/20835.html

相关文章:

  • 力扣-销售员
  • HTML综合案例练习
  • MySQL运维
  • 【网络原理10】构造HTTP请求、HTTPS加密
  • Allegro如何锁定报表界面操作指导
  • 基于STM32的微型电子琴设计
  • Shell输入输出重定向
  • 华为OD机试-运维日志排序
  • 1Kotlin基础知识
  • Redis Lua脚本
  • web自动化测试-执行 JavaScript 脚本
  • libevent笔记——简单介绍
  • C++学习笔记-多态
  • 5632: 三角形
  • Java基础--IO操作
  • C++多线程
  • 【Arduino使用nRF24L01 】
  • Appium自动化测试框架是一种较为优雅的使用方式
  • Linux c编程之应用交互协议分析与设计
  • 基于YOLOv5的细胞检测实战
  • 【经典蓝牙】蓝牙AVRCP协议分析
  • gin 框架初始教程
  • 对象分配策略
  • 你可能不知道的前端监控方案
  • java spring AOP 完全注解开发
  • ctf pwn基础-4
  • bool与引用类型
  • tkinter界面的TCP通信/tkinter开启线程接收TCP
  • [SQL Statements] 基本的SQL知识 之DDL针对数据库的基本操作
  • Qt的MOC机制