随笔 - 66  文章 - 1  评论 - 2  阅读 - 10万

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   斗战胜佛美猴王  阅读(601)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示