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

相关推荐
Quz10 小时前
QML Hello World 入门示例
qt
xcyxiner3 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner4 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner4 天前
DicomViewer (添加模型类)3
qt
xcyxiner5 天前
DicomViewer (目录调整) 2
qt
xcyxiner5 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
LDR0067 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术7 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园7 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob7 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio