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