Qt PushButton 点一下 触发两边槽函数的问题

先看代码

cpp 复制代码
SdBatchTool::SdBatchTool(QWidget *parent) : QMainWindow(parent) {
  ui.setupUi(this);
  init_ui();
  print_log("工具启动......");
}

SdBatchTool::~SdBatchTool() {}

void SdBatchTool::init_ui() {
  //connect(ui.btn_identy, &QPushButton::clicked, this,
  //        &SdBatchTool::on_btn_identy_clicked);
  //connect(ui.btn_select_p8b, &QPushButton::clicked, this,
  //        &SdBatchTool::on_btn_select_p8b_clicked);
  //connect(ui.btn_export, &QPushButton::clicked, this,
  //        &SdBatchTool::on_btn_export_clicked);

  connect(this, &SdBatchTool::print_log, this, &SdBatchTool::on_print_log);
}

void SdBatchTool::on_btn_identy_clicked() {}

void SdBatchTool::on_btn_select_p8b_clicked() {
  p8b_path = QFileDialog::getExistingDirectory(
      this, "选择指纹文件导出文件夹", QString(),
      QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);

  if (!p8b_path.isEmpty()) {
    ui.le_p8b_path->setText(p8b_path);
  }
}

我在界面上加了一个QPushButton,ID是btn_identy,槽函数为void on_btn_identy_clicked();

我手动加了connect函数。加完后运行,发现点击QPushButton一下,会触发两遍槽函数。

后来我把connect注释掉,发现QPushButton的槽函数还是会被触发,但是只触发一遍,正常了。

这时我才发现,原来Qt中 如果槽函数命名为on_<QPushButton ID>_clicked,那么就可以免写connect,默认就已经连接了。

所以我手动写了一遍connect,反而重复连接,所以才会触发两遍。

相关推荐
拾贰_C6 小时前
【Google | Gemini | API | POST】怎么使用Google 的Gemini API (原生版)
开发语言·lua
t***5447 小时前
如何在Dev-C++中选择Clang编译器
开发语言·c++
橙子199110167 小时前
Java 基础相关
java·开发语言
星越华夏8 小时前
python——三角函数用法
开发语言·python
代码中介商8 小时前
C语言数据存储深度解析:从原码反码补码到浮点数存储
c语言·开发语言·内存
2501_9333295510 小时前
企业级舆情监测系统技术解析:Infoseek数字公关AI中台架构与实践
开发语言·人工智能·自然语言处理·架构
Wave84510 小时前
C++继承详解
开发语言·c++·算法
Tairitsu_H11 小时前
C++类基础概念:定义、实例化和this指针
开发语言·c++
.柒宇.11 小时前
Java八股之反射
java·开发语言