我是靠谱客的博主 完美牛排,最近开发中收集的这篇文章主要介绍Qt5.15之槽函数获取信号发送者sender类使用,自定义类无法获取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")

欢迎评论:

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

最后

以上就是完美牛排为你收集整理的Qt5.15之槽函数获取信号发送者sender类使用,自定义类无法获取sender,完美解决问题描述遇到的问题始终获得不到sender类。原因分析:解决方案:欢迎评论:的全部内容,希望文章能够帮你解决Qt5.15之槽函数获取信号发送者sender类使用,自定义类无法获取sender,完美解决问题描述遇到的问题始终获得不到sender类。原因分析:解决方案:欢迎评论:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部