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

相关推荐
小短腿的代码世界9 分钟前
打印不止是QPrinter:深入Qt Print Support框架的内核设计与跨平台输出管道
开发语言·qt
性野喜悲9 分钟前
python将excel中的链接转成图片并替换链接展示在excel中【将pdf的第一页插入excel并将对应信息获取到插入签名等位置】
开发语言·python·excel
诙_11 分钟前
C++代码实践应用
开发语言·c++
谙弆悕博士12 分钟前
【附C语言源码】从零实现命令行贪吃蛇游戏
c语言·开发语言·学习·游戏·游戏程序·小游戏·贪吃蛇
Evand J25 分钟前
【无人机编队控制程序4】复杂障碍环境下多无人机编队避障(人工势场法APF)与协同控制,MATLAB仿真例程
开发语言·matlab·无人机·控制·apf·避障
南宫萧幕1 小时前
基于 MATLAB 的插电混动汽车 CD-CS 策略 WLTC 前向仿真实现
开发语言·matlab·汽车
代钦塔拉1 小时前
第一篇:工业级 C++/Qt 项目头文件包含原则:告别循环依赖与编译玄学
开发语言·c++·qt
谷雨不太卷1 小时前
Linux基础IO
java·开发语言
神仙别闹2 小时前
基于PHP+MySQL实现在线考试系统
开发语言·mysql·php