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

Qt学习笔记(二)Qt 信号与槽

系列文章目录

Qt开发笔记(一)Qt的基础知识及环境编译(泰山派)
Qt学习笔记(二)Qt 信号与槽


文章目录

  • 系列文章目录
    • @[TOC](文章目录)
  • 前言
  • 一、Qt 信号与槽机制
    • 1.1 什么是信号和槽
    • 1.1 信号和槽的关联及断连
  • 二、编辑槽函数
    • 1. 自动关联
    • 2. 手动关联

前言

  在学习 Qt 的过程中,信号与槽是必不可少的部分,也是 Qt 编程的
基础,是 Qt 编程的一大创新,这里分一个章节来学习这个 Qt 的信号与槽。


一、Qt 信号与槽机制

1.1 什么是信号和槽

  信号(Signal)就是在特定情况下被发射的事件,例如 PushButton 最常见的信号就是鼠标单击时发射的 clicked() 信号,一个 ComboBox 最常见的信号是选择的列表项变化时发射的CurrentIndexChanged() 信号。GUI 程序设计的主要内容就是对界面上各组件的信号的响应,只需要知道什么情况下发射哪些信号,合理地去响应和处理这些信号就可以了。
  槽(Slot)就是对信号响应的函数。槽就是一个函数,与一般的 C++函数是一样的,可以定义在类的任何部分(public、private 或 protected),可以具有任何参数,也可以被直接调用。槽函数与一般的函数不同的是:槽函数可以与一个信号关联,当信号被发射时,关联的槽函数被自动执行。
在这里插入图片描述

1.1 信号和槽的关联及断连

  信号与槽关联是用 QObject::connect() 函数实现的,它是connect() 是 QObject 类的一个静态函数,其基本格式是:

// 完整格式
QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));// 在实际调用时可以忽略前面的限定符
connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));

  其中,sender 是发射信号的对象的名称,signal() 是信号名称。信号可以看做是特殊的函数,需要带括号,有参数时还需要指明参数。receiver 是接收信号的对象名称,slot() 是槽函数的名称,需要带括号,有参数时还需要指明参数。
  断开连接需要使用 disconnect()函数,其格式如下:

// 断开一切与 myObject 连接的信号或槽
bool QObject::disconnect(sender,SIGNAL(signal()), receiver, SLOT(slot()));

  信号与槽机制是 Qt GUI 编程的基础,使用信号与槽机制可以比较容易地将信号与响应代码关联起来。我们在平常编辑的时候可以直接利用UI设计器进行编辑(自动关联),当运行之后会自动生成Ui_MainWindow.h文件。
在这里插入图片描述
在这里插入图片描述

二、编辑槽函数

1. 自动关联

  右键我们的控件,选择转到槽,然后选择一个触发方式,之后便会在mainwindow.cpp文件下生成一个槽函数,并在mainwindow.h下进行申明。这里要特别注意,槽函数只能申明在private slots 或者public slots下
在这里插入图片描述
  在生成的on_connect_clicked( )槽函数中进行功能编辑,笔者这里是进行了一个打印功能。
在这里插入图片描述
  执行之后可以看到,下方的控制窗口已经打印出来了信息。
在这里插入图片描述

2. 手动关联

  这种方式需要用的我们上文提到的connect和disconnect函数,主要是服务于大型项目。它可以自定义更多槽函数功能和名称,具有极大的灵活性,同时由于所有界面都在代码中定义,避免了 UI 文件和逻辑代码分离带来的管理复杂性,所有人都能在代码中找到界面和逻辑。以下是手动关联的基本流程:

  1. 创建项目与 UI 设计
      假设你已经在 Qt Designer 中设计了一个简单的窗口(也可以纯代码编写),包含一个按钮 pushButton 和一个标签 label。
  2. 创建 C++ 类
      创建一个 C++ 类并添加信号的声明,通常是继承自 QMainWindow 或 QWidget。
// 头文件 mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();signals:void myCustomSignal();  // 声明自定义信号private slots:  // 声明槽函数void onButtonClicked();private:Ui::MainWindow *ui;  // UI 指针
};
#endif // MAINWINDOW_H
  1. 实现构造函数与析构函数
// 源文件 mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);  // 设置 UI// 手动连接信号与槽connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(onButtonClicked())); // 连接按钮的点击信号到槽
}MainWindow::~MainWindow()
{delete ui;
}
  1. 实现槽函数
      在 mainwindow.cpp 中,实现槽函数,这部分同上文自动关联。

免责声明:本文参考了网上公开的部分资料,仅供学习参考使用,若有侵权或勘误请联系笔者。


http://www.mrgr.cn/news/56147.html

相关文章:

  • C#Winform的控件基类Control
  • 音频分割:长语音音频 分割为 短语音音频 - python 实现
  • 单例设计模式(Singleton Pattern)
  • MySQL 日常维护指南:常见任务、频率及问题解决
  • 接口测试-接口支持幂等
  • SpringBoot中的对象
  • 华为HarmonyOS实现实时语音识别转文本
  • python将1格式化为01
  • k8s dockers 部署 k8s运行docker
  • 使用RRT算法进行路径规划的探索与优化
  • CodeQL和数据流分析的简介
  • 双十一有哪些值得购买的好物品?2024双十一超级好用的五款品牌分享
  • Qt开发笔记(一)Qt的基础知识及环境编译(泰山派)
  • 关于美团外卖霸王餐系统的详细介绍?你了解多少
  • 低代码平台:让系统开发随需而变,轻松应对各种需求!
  • [电子科大]王丽杰 离散数学 第二讲 特殊集合和集合间关系 笔记
  • 2024 年入门编程培训,仍然值得
  • 川宁生物三季报:抗生素中间体稳健增长,合成生物学产能蓄势待发
  • 深入解析 ThreadPoolExecutor:参数配置与源码分析
  • OAK相机的标定流程更新与优化通知
  • 高标准农田灌区信息化助力精准农业发展
  • springboot在线学习系统-计算机毕业设计源码78477
  • Android 添加线性亮度,替换原来的不平滑亮度曲线
  • 小巧设计,强大功能:探索SoC模块的多样化功能
  • 【视频生成大模型】 视频生成大模型 THUDM/CogVideoX-2b
  • Xcode真机运行正常,打包报错