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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现