问题描述
提示:这里描述具体问题:
在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")
欢迎评论:
提示:欢迎大家在评论区讨论相关问题。
可以关注博主,我会持续更新工作中遇到的技术小砖头,供大家使用。
也可以在评论区告知好的小砖头或技术,我会收录。
还可以指出本博文错误,希望大家不吝赐教。