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

阻止Qt控件发出信号的方法

大多数Qt控件,如QCheckBox,QComboBox等,在被(取消)勾选、切换选项时都会发出诸如stateChanged、currentIndexChanged这类的信号。但是有时,我们需要控件只在某些情况下发出信号,其他时候则不发出信号。看下面的例子:

#include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> #include <QPushButton> #include <QCheckBox> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); //checkbox发生变化,触发label变化 connect(ui->checkBox, &QCheckBox::stateChanged, [this](int iState){ ui->label->setText(QString("%1").arg(iState)); }); //启用blockSignals后,按钮按下后,触发checkbox变化。但是不再触发checkbox的statChanged信号,也就不再引起label变化; //假如不启用blockSignals,每次按下按钮,都会触发checkbox的statChanged信号 connect(ui->pushButton, &QPushButton::clicked, [this](){ //ui->checkBox->blockSignals(true); ui->checkBox->toggle(); //ui->checkBox->blockSignals(false); }); } MainWindow::~MainWindow() { delete ui; }

效果:

阻止Qt控件发出信号的方法-不使用blockSignals

这里,每次按下按钮,都会触发checkbox的stateChanged信号,于是label的显示也随之变化。

假如我只想要操作checkbox时才触发stateChanged信号,其他时候不触发,就要使用blockSignals函数:

#include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> #include <QPushButton> #include <QCheckBox> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); //checkbox发生变化,触发label变化 connect(ui->checkBox, &QCheckBox::stateChanged, [this](int iState){ ui->label->setText(QString("%1").arg(iState)); }); //启用blockSignals后,按钮按下后,触发checkbox变化。但是不再触发checkbox的statChanged信号,也就不再引起label变化; //假如不启用blockSignals,每次按下按钮,都会触发checkbox的statChanged信号 connect(ui->pushButton, &QPushButton::clicked, [this](){ ui->checkBox->blockSignals(true); ui->checkBox->toggle(); ui->checkBox->blockSignals(false); }); } MainWindow::~MainWindow() { delete ui; }

效果:

阻止Qt控件发出信号的方法-使用blockSignals

结论

使用blockSignals(true)可以临时阻止控件发送信号;但是blockSignals(false)可以解除此限制。

http://www.jsqmd.com/news/524432/

相关文章:

  • 2026年中国GEO服务商权威榜单:五大综合技术驱动型厂商实力解析
  • YOLOv8极速CPU优化:物联网设备毫秒级推理的代码实现与性能调优
  • SEO_网站SEO优化见效慢?试试这几个解决办法
  • UDP协议通信
  • HAL_新建工程(手动移植)
  • SEO_从零开始制定一份可执行的SEO优化方案
  • 保姆级教程:用Arduino IDE给ESP-01S烧录第一个程序(附CH340驱动安装)
  • Codex 安装与配置指南
  • SEO_为什么你的SEO效果不好?原因分析与对策
  • Guohua Diffusion 生成图像分辨率提升实战:从512px到2K
  • 2026年 真空干燥设备厂家推荐排行榜:SZG双锥回转真空/自动进出料/真空耙式/梨刀/桨叶/闪蒸干燥机,高效节能技术实力深度解析 - 品牌企业推荐师(官方)
  • 斯坦福提出 TTT-Discover:在测试时继续学习,让大模型“边做边进化”的科研发现引擎
  • 探索路基水盐迁移与温度场的数值奥秘
  • 什么是 Tailwind CSS
  • 训练语义分割模型的理解
  • Benders分解
  • CF538H Summer Dichotomy
  • 数据库如何表达M:N关系结合python结合SQLAlchemy
  • PaddleOCR模型跨平台部署实战:从PaddlePaddle到ONNXRuntime的完整指南
  • IOS历史版本下载
  • 基于深度学习的麦穗计数系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
  • MMDetection3D多GPU训练报错ChildFailedError?一个find_unused_parameters参数就能搞定
  • 2026年艺术玻璃厂家推荐排行榜:手工彩绘/热熔琉璃/雕刻镶嵌/夹丝夹胶等艺术玻璃品牌深度解析与选购指南 - 品牌企业推荐师(官方)
  • 实测对比:Qwen QwQ-32B-AWQ在RTX 4090上的量化效果与原生模型差异(附显存占用监控技巧)
  • ESP32与DS18B20的高精度温度监测方案
  • Dify离线部署实战:无网环境下的插件打包与依赖整合
  • 20243222 实验一《Python程序设计》实验报告
  • 2026年 锂电池设备厂家推荐榜单:自动分选机/PACK组装线/激光焊接机/储能产线,新能源制造全流程自动化解决方案精选 - 品牌企业推荐师(官方)
  • 经典复现】COMSOL 仿真模拟激光熔覆
  • 杭州企业老板必读:GEO 到底是什么?为何 AI 时代本地获客离不开 GEO 推广?