qml太占用内存了_Qml组件化编程5-Qml与C++交互

这篇博客介绍了Qml组件化编程中的Qml与C++交互,涵盖C++访问Qml的findChild方法和QQmlComponent的使用,以及Qml如何注册和访问C++内容。内容包括Qml对象的查找、动态加载Qml文件、注册QML可访问的C++内容等,适合Qt开发者学习。
摘要由CSDN通过智能技术生成

简介

本文是《Qml组件化编程》系列文章的第五篇,涛哥将教大家,Qml与C++的交互。

Qml已经有很多功能,不过终归会有不够用或不适用的地方,需要通过与C++的交互进行功能扩展。

这回涛哥尝试把所有Qml与C++交互相关的知识点都写出来,做一个透彻、全面的总结。


顺便说一下,涛哥的TaoQuick项目正式开源了, 系列文章中的所有功能,包括动态换皮肤、切换多语言等等,都集成在了TaoQuick中,
同时涛哥也在TaoQuick中使用了持续集成(CI)技术,目前已经能够自动编译、发布Windows和 Macos平台的软件包,可以在github的Release界面下载体验。
互联网行业很流行的DevOps理念,在TaoQuick项目中得到了最佳的实践。
(linux平台的发布工具linuxdeployqt暂时还有点问题,涛哥后续会搞定的)
地址在这,赶快去star吧:

https://github.com/jaredtao/TaoQuick​github.com

注:文章主要发布在涛哥的博客 和 知乎专栏-涛哥的Qt进阶之路

C++访问Qml

c++访问Qml有两种方式: findChild和 QQmlComponent。

findChild

了解Qt的人都知道,Qt的很多对象是QObject的子类,这些QObject只要设置了parent,就是有父子关系的,会产生一棵 “对象树”。

只要有了根节点,树上的任意节点都可以通过findChild的方式获取到。

写个简单的TaoObject,来示意一下:

class TaoObject
{
public:
    //构造函数,传递parent进来
    TaoObject(TaoObject *parent = nullptr) : m_pParent(parent)
    {
        if (m_pParent)
        {
            m_pParent->appendChild(this);
        }
    }
    //析构函数,析构children。即子对象自动回收机制。
    ~TaoObject()
    {
        for (auto *pObj : m_children)
        {
            delete pObj;
        }
        m_children.clear();
    }
    //获取name
    const QString &getName() const
    {
        return m_name;
    }
    //设置name
    void setName(const QString &name)
    {
        m_name = name;
    }
    //查找子Object
    TaoObject *findChild(const QString &name)
    {
        //先检查自己的名字,是否匹配目标名字
        if (m_name == name)
        {
            return this;
        }
        //遍历子Object,查找
        for (auto pObj : m_children)
        {
            //递归调用,深度优先的搜索
            auto resObj = pObj->findChild(name);
            if (resObj)
            {
               
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值