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,反而重复连接,所以才会触发两遍。

相关推荐
co_wait2 小时前
【C++ STL】list容器的基本使用
开发语言·c++·list
全干工程师—2 小时前
Qt中的QTimer类
开发语言·qt
LawrenceLan2 小时前
36.Flutter 零基础入门(三十六):StatefulWidget 与 setState 进阶 —— 动态页面必学
开发语言·前端·flutter·dart
枫叶丹42 小时前
【Qt开发】Qt界面优化(十)->常用控件--复选框
c语言·开发语言·c++·qt
宵时待雨2 小时前
C++笔记归纳9:模板进阶
开发语言·数据结构·c++·笔记
爱装代码的小瓶子2 小时前
【c++与Linux进阶】轻量化进程与虚拟地址和页表
linux·开发语言·c++
Lin_林2 小时前
国内 Docker 服务状态 & 镜像加速监控
java·开发语言
*.✧屠苏隐遥(ノ◕ヮ◕)ノ*.✧3 小时前
Java 集合 (Collection)
java·开发语言
一直都在5723 小时前
Java基础面经(二)
java·开发语言