Qt - QObject::sender()函数的用法
QObject::sender()说明
- 在槽函数里,使用 QObject::sender()可以获取信号发射者指针,如果知道信号发射者的类型,可以将指针投射为确定的类型,然后使用这个确认类的接口函数。
QObject::sender()用法
同时定义多个控件时,用sender区分当前使用的是哪个控件。
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
public slots:
void btnAddClick();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QDebug>
#include <QMessageBox>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{
ui->setupUi(this);
// 自定义两个按钮
QPushButton *btnAdd = new QPushButton(this);
btnAdd->setGeometry(QRect(0, 0, 100, 30));
btnAdd->setText(QStringLiteral("Add Data "));
QPushButton *btnDel = new QPushButton(this);
btnDel->setGeometry(QRect(0, 100, 100, 30));
btnDel->setText(QStringLiteral("Del Data "));
connect(btnAdd, &QPushButton::clicked, this, &Widget::btnAddClick);
connect(btnDel, &QPushButton::clicked, this, &Widget::btnAddClick);
// 打印出按钮地址
qDebug() << "Add Addr:"<< btnAdd << "Del Addr:" << btnDel;
}
Widget::~Widget()
{
delete ui;
}
void Widget::btnAddClick()
{
// 获取是那个按钮点击了
//写法1:
//QPushButton *obj = qobject_cast<QPushButton *>(sender());
//写法2:
//QObject *obj = QObject::sender();
//QPushButton *btn = qobject_cast<QPushButton*>(obj);
//写法3:
QPushButton *btn = static_cast<QPushButton*>(sender());
// 打印出按钮地址
qDebug() << btn;
if (btn == nullptr)
{
// sender() 函数在槽函数之外调用是无效的,
// 因此在这里执行错误处理操作。
return;
}
// 进行其他的槽函数处理操作。
QMessageBox::about(this, "tips", btn->text());
}
运行效果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!