栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++、Qt类型转换 dynamic

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++、Qt类型转换 dynamic

dynamic_cast,static_cast,const_cast,qobject_cast,reinterpret_cast dynamic_cast使用
  • 下行安全
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
  • 类上行安全,下行不安全
    1. 同上面的例子
const_cast
  • 这个就是去常
reinterpret_cast
  • 用于转换后的不安全
qobject_cast使用
  • 在使用上有两个限制

    1. 必须继承QObject
    2. 必须在头文件中声明下Q_OBJECT宏
  • 使用场景1

    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
      }
    
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/886886.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号