qobject_cast用法总结

qobject_cast()动态转换QObject类的类型。qobject_cast()函数和标准C++的dynamic_cast()功能类似,只是其不需要RTTI的支持,而且可以跨越动态连接库的边界。它尝试将它的参数cast成尖括号内的对象类型,如果对象是正确的类型(运行时决定)则返回非零,否则返回0,说明对象类型不兼容。

T qobject_cast ( QObject * object )
本方法返回object向下的转型T,如果转型不成功则返回0,如果传入的object本身就是0则返回0。

在使用时有两个限制:
1# T类型必须继承自QObject。
2# 在声明时必须有Q_OBJECT宏。

 

 

使用场景:

1.sender()函数

QPushButton *button_tmp=qobject_cast<QPushButton *>(sender());

当某一个Object emit一个signal的时候,它就是一个sender,系统会记录下当前是谁emit出这个signal的,所以你在对应的slot里就可以通过 sender()得到当前是谁invoke了你的slot,对应的是QObject->d->sender.

 

2.通过QWidget * QApplication::focusWidget()可以获得当前拥有焦点的widget,然后和你的那几个可能有焦点的widget逐一比对即可执行对应操作

QWidget * fWidget = qApp->focusWidget();
    if (lineEdit1 == qobject_cast<QLineEdit *>(fWidget ))
    {
            //lineEdit1
    }
    else if(lineEdit2 == qobject_cast<QLineEdit *>(fWidget ))
    { 
            //lineEdit2
    }
    else if(lineEdit3 == qobject_cast<QLineEdit *>(fWidget ))
    {
            //lineEdit3
    }
    else if(textEdit == qobject_cast<QTextEdit *>(fWidget ))
    {
            //textEdit
    }

 

————————————————
原文链接:https://blog.csdn.net/u013360881/article/details/78878420

posted on 2022-09-27 14:39  斗战胜佛美猴王  阅读(448)  评论(0编辑  收藏  举报