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

嵌入式QT学习第4天:Qt 信号与槽

Linux版本号4.1.15   芯片I.MX6ULL                                 大叔学Linux    品人间百味  思文短情长


        本章思维导图如下:

        不使用 Qt Designer 的方式进行开发,用代码绘界面,可以锻炼我们的布局能力,和代码逻辑能力!


    1.QT信号与槽机制

        信号:在特定情况下发射的事件。

        槽:对信号反应的函数。

        信号与槽关联是用 QObject::connect() 函数实现的:

connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));

/*

sender:发射信号的对象。
signal():信号名称。
receiver:接收信号的名称。
slot():槽函数,带括号,有参数带参数。

*/

        一个信号可以连接多个槽;

        多个信号可以连接同一个槽;

        一个信号可以连接另外一个信号;

        在使用信号与槽的类中,必须在类的定义中加入宏 Q_OBJECT(特别重要)


    2.创建信号

        信号只需声明, 无需定义

8
class MainWindow : public QMainWindow
9 {
10 Q_OBJECT
11
12 public:
13 MainWindow(QWidget *parent = nullptr);
14 ~MainWindow();
15
16 signals:
17 /* 声明一个信号,只需声明,无需定义 */
18 void pushButtonTextChanged();
19
20 };

    3.创建槽

        直接在 mianwindow.h 里直接声明槽,在 mianwindow.cpp 里实现槽的定义, 声明槽必须写槽的定义(定义指函数体的实现),否则编译器编译时将会报错。

mainwindow.h 添加槽函数后的代码
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3 4
#include <QMainWindow>
5 /* 引入 QPushButton */
6 #include <QPushButton>
7 8
class MainWindow : public QMainWindow
9 {
10 Q_OBJECT
11
12 public:
13 MainWindow(QWidget *parent = nullptr);
14 ~MainWindow();
15
16
17 signals:
18 /* 声明一个信号,只需声明,无需定义 */
19 void pushButtonTextChanged();
20
21 public slots:
22 /* 声明一个槽函数 */
23 void changeButtonText();
24
25 /* 声明按钮点击的槽函数 */
26 void pushButtonClicked();
27
28 private:
29 Ui::MainWindow *ui;
30 /* 声明一个对象 pushButton */
31 QPushButton *pushButton;
32 };
33 #endif // MAINWINDOW_H
mainwindow.cpp 添加槽的实现代码
1 #include "mainwindow.h"
2 3
MainWindow::MainWindow(QWidget *parent)
4 : QMainWindow(parent)
5 {
6 /* 设置窗体的宽为 800,高为 480 */
7 this->resize(800,480);
8 9
/* 实例化 pushButton 对象 */
10 pushButton = new QPushButton(this);
11
12 /* 调用 setText()方法设定按钮的文本 */
13 pushButton->setText("我是一个按钮");
14 }
15
16 MainWindow::~MainWindow()
17 {
18
19 }
20
21 /* 实现按钮点击槽函数 */
22 void MainWindow::pushButtonClicked()
23 {
24 /* 使用 emit 发送信号 */
25 emit pushButtonTextChanged();
26 }
27
28 /* 实现按钮文本改变的槽函数 */
29 void MainWindow::changeButtonText()
30 {
31 /* 在槽函数里改变按钮的文本 */
32 pushButton->setText("被点击了! ");
33 }

    4.连接信号与槽

        实现函数:

connect(pushButton, SIGNAL(clicked()), this, SLOT(pushButtonClicked()));
connect(this, SIGNAL(pushButtonTextChanged()), this, SLOT(changeButtonText()));

        具体实现:

15 /* 信号与槽连接 */
16 connect(pushButton, SIGNAL(clicked()), this,
SLOT(pushButtonClicked()));

connect(this, SIGNAL(pushButtonTextChanged()), this,
SLOT(changeButtonText()));

//本类定义的信号,所以用this

    5.使用Qt类的信号与槽

        用 Qt 帮助文档来查看 Qt定义的信号与槽。


本笔记为参考正点原子开发板配套教程整理而得,仅用于学习交流使用,未经允许不得用于商业用途。


http://www.kler.cn/a/416661.html

相关文章:

  • 【docker】9. 镜像操作与实战
  • JavaScript 中的原型和原型链
  • redis中的哨兵
  • 信息安全实验--密码学实验工具:CrypTool
  • 即时通讯| IM+RTC在AI技术加持下的社交体验
  • Milvus 2.5:全文检索上线,标量过滤提速,易用性再突破!
  • 无人机数据处理系统:原理与核心系统
  • 12 设计模式之工厂方法模式
  • 华为OD机试真题-数组组成的最小数-2024年OD统一考试(E卷)
  • 管家婆工贸ERP BR042.存货自定义项虚拟库存状况表
  • mysql--二进制安装编译安装yum安装
  • vue3项目搭建-6-axios 基础配置
  • SmartSQL:一款方便、快捷的数据库文档查询、导出工具
  • Vue.js 组件开发进阶:构建可扩展的组件库
  • MySQL授权外部设备访问本地数据库
  • 设计模式 外观模式 门面模式
  • A02、数据库性能调优
  • SpringBoot源码-SpringBoot内嵌Tomcat原理
  • 科研小白成长记41——享受大起大落
  • 【真正离线安装】Adobe Flash Player 32.0.0.156 插件离线安装包下载(无需联网安装)
  • c++学习——list容器的使用学习
  • 【C++】LeetCode:LCR 077. 排序链表
  • YOLO系列论文综述(从YOLOv1到YOLOv11)【第13篇:YOLOv10——实时端到端物体检测】
  • Vue.js 实现用户注册功能
  • Python 小高考篇(8)拓展
  • 拥抱 OpenTelemetry:阿里云 Java Agent 演进实践