- 下行安全
class Base
{
public:
Base(){}
virtual void show(){}
};
class AChild : public Base
{
public:
AChild()
{
}
};
int main()
{
Base* base1 = new AChild();
AChild* aChild = dynamic_cast(base1);//下行安全
return 0;
}
static_cast
- 类上行安全,下行不安全
- 同上面的例子
- 这个就是去常
- 用于转换后的不安全
-
在使用上有两个限制
- 必须继承QObject
- 必须在头文件中声明下Q_OBJECT宏
-
使用场景1
- 在槽函数里面如果获取想获取信号的发送者的对象是谁,则可以通过sender()函数为获取
auto cccTestBtn = new QPushButton(this); connect(cccTestBtn,&QPushButton::clicked,this,[this](){ auto obj = sender(); //obj 为QObject类型,sender()返回的是QObject*类型 //TODO: auto testBtn = qobject_cast(obj); //... }); 上面代码其实没有实际的意义,仅仅演示下sender() 跟qobject_cast使用
2.在主窗口通过QWidget * QApplication::focusWidget()可以获得当前拥有焦点的widget,然后和你的那几个可能有焦点的widget逐一比对即可执行对应操作
auto ptrWidget = qApp->focusWidget(); if (btn1 == qobject_cast
(ptrWidget )) { //TODO: btn1 obj handle } else if(btn2 == qobject_cast (ptrWidget )) { //TODO: btn2 obj handle }



