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

重庆市互联网协会鲨皇seo

重庆市互联网协会,鲨皇seo,苏州建网站的公司一站式服务,做废钢那个网站好两种方法的对比 方法1:sender() 优点:代码简洁,无需额外参数 缺点:依赖运行时类型转换,安全性较低 适用场景:简单场景,少量按钮 方法2:Lambda (推荐) 优点:安全直观&…

两种方法的对比

  • 方法1:sender()

优点:代码简洁,无需额外参数
缺点:依赖运行时类型转换,安全性较低
适用场景:简单场景,少量按钮

  • 方法2:Lambda (推荐)

优点:安全直观,直接传递标识
缺点:需要为每个按钮单独连接
适用场景:现代Qt项目,推荐首选(QT5以上才支持)

注意事项:

  • 线程安全
    • 若在多线程环境中使用 sender(),需确保发送者对象未被销毁。
  • 性能优化
    • 对高频点击按钮,避免在槽函数中执行耗时操作。
  • 代码维护
    • 使用枚举代替字符串标识(如 enum ButtonType { Prev, Next, … })可提高代码健壮性。

示例代码:

// widget.h

// widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void onButtonClicked();void handleButton(const QString &btnType); // 统一处理函数private:Ui::Widget *ui;
};
#endif // WIDGET_H

// widget.cpp

// widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 方法1:使用 sender() 函数识别信号源// 方法1.步骤1:统一连接按钮的 clicked 信号到槽connect(ui->btn1, &QPushButton::clicked, this, &Widget::onButtonClicked);connect(ui->btn2, &QPushButton::clicked, this, &Widget::onButtonClicked);connect(ui->btn3, &QPushButton::clicked, this, &Widget::onButtonClicked);// 方法2:Lambda 表达式传递按钮标识// 方法2:步骤1:连接信号时通过Lambda捕获按钮对象connect(ui->btn1, &QPushButton::clicked, [this]() { handleButton("prev"); });connect(ui->btn2, &QPushButton::clicked, [this]() { handleButton("next"); });connect(ui->btn3, &QPushButton::clicked, [this]() { handleButton("forecast"); });
}Widget::~Widget()
{delete ui;
}// 方法1:步骤2:在槽函数中通过 sender() 判断来源
void Widget::onButtonClicked()
{
#if 1QString objName = sender()->objectName();if (objName == "btn1") {qDebug() << "方法1-btn1被点击";} else if (objName == "btn2") {qDebug() << "方法1-btn2被点击";} else if (objName == "btn3") {qDebug() << "方法1-btn3被点击";}
#elseQPushButton *clickedButton = qobject_cast<QPushButton*>(sender());if (!clickedButton)return;// 根据按钮的 objectName 或指针地址区分if (clickedButton == ui->btn1) {qDebug() << "方法1-btn1被点击";} else if (clickedButton == ui->btn2) {qDebug() << "方法1-btn2被点击";} else if (clickedButton->objectName() == "btn3") {qDebug() << "方法1-btn3被点击";}
#endif
}
// 方法2:步骤2:统一处理函数
void Widget::handleButton(const QString &btnType)
{if (btnType == "prev") {qDebug() << "方法2-btn1被点击";} else if (btnType == "next") {qDebug() << "方法2-btn2被点击";} else if (btnType == "forecast") {qDebug() << "方法2-btn3被点击";}
}

现象:

在这里插入图片描述

http://www.dtcms.com/a/531040.html

相关文章:

  • 设计师参考效果图网站做网站需要写配置文件吗
  • 成都网站建设推荐到访率公司网站项目需求说明书
  • 使用php做的网站有哪些长鳖春遇网站开发
  • 在建立网站站点的过程中工商局网站实名认证怎么做
  • 自己做网站制作流程网页定做
  • 网站首页 模板wordpress改二级域名
  • 用c语言做公司网站二级域名分发平台
  • 如何找回网站后台密码html做的网站排版导致乱码
  • app推广的网站常州微网站建设文档
  • 宁陵视频网站建设西安市建设工程交易中心
  • 小工作室做网站flash 网站 收费
  • 网站建设分金手指专业二七php小程序商城
  • 网站建设咨询有客诚信网站建设咨询带有数据库的网站模板
  • 可以做网站的域名后缀宜良网站建设
  • 高要网站建设公司网站常用文件夹
  • 深圳营销网站建站公司英文网站提交
  • 制作网站费怎么做会计科目网店运营包括哪些
  • 融水苗族自治县网站建设公司甘肃网站推广
  • 使用织梦系统建设网站教程百度服务商
  • 北京 设计网站福州设计网站建设
  • windows做的ppt下载网站it外包工作怎么样
  • 网站添加百度地图标注做公司官网要服务器吗
  • 企业网站导航设计腰椎间盘突出压迫神经腿疼怎么治锻炼
  • 南宁网站制作网络公司营销型网站建设排名
  • 网站举报平台建设情况加盟网站分页怎么做seo
  • wordpress网站主修改做任务什么网站
  • 网站备份查询学校网站建设的目的
  • 重庆网站制作招聘番禺免费核酸检测
  • 网络营销导向型企业网站建设的原则北京微信网站建设报价
  • 辽宁省交通投资建设集团网站网站制作绩效考核表