Qt5.15之槽函数获取信号发送者sender类使用,自定义类无法获取sender,完美解决

问题描述

提示:这里描述具体问题:在Qt开发过程中遇到了一个槽函数对应多个信号发送者,需要区分是哪一个sender,然后做不同的处理。

遇到的问题始终获得不到sender类。

10:54:48: Starting D:/test/build-TEST-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/TEST.exe...
lineEdit->objectName()== QWidget(0x0)

代码如下

在Qt中定义了一个自己的类(不是Qt基类),这个类如下:

#ifndef SITE1_H
#define SITE1_H

#include <QWidget>
#include <mainwindow.h>

namespace Ui {
class myClass;
}
class myClass: public QWidget
{
    Q_OBJECT

public:
    explicit myClass(QWidget *parent = nullptr);
    ~myClass();

private slots:
    void on_goButton_clicked();

private:
    Ui::SITE1 *ui;

};

#endif // SITE1_H

connect

    TEST *test1= new TEST ;
    test1->show();
    test1->setObjectName("test1");
    //    内存回收
    test1->setAttribute(Qt::WA_DeleteOnClose);
     //设置对应的信号关联,子窗口关闭会发destroyed信号
    connect(test1, SIGNAL(destroyed()), this, SLOT(setButton()));
void MainWindow::setButton()
{
    TEST *test1 = qobject_cast<TEST *>(sender());
    qDebug()<<"lineEdit->objectName()=="<<test1 ;
}

原因分析:

提示:这里填写问题的分析:由于sender类类型转换时需要的是Qt基类,而不是自定义的类。


解决方案:

提示:这里填写该问题的具体解决方案:修改类型转时代码为Qt基类即可。

void MainWindow::setButton()
{
    QWidget *test1 = qobject_cast<QWidget*>(sender());
    qDebug()<<"lineEdit->objectName()=="<<test1 ;
}

结果如下:

11:06:52: Starting D:/TEST/build-TEST-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/TEST.exe...
lineEdit->objectName()== QWidget(0xc2d230, name="test1")

欢迎评论:

提示:欢迎大家在评论区讨论相关问题。
可以关注博主,我会持续更新工作中遇到的技术小砖头,供大家使用。
也可以在评论区告知好的小砖头或技术,我会收录。
还可以指出本博文错误,希望大家不吝赐教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端小白到专家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值