首页 > 编程语言 >c++中调用QML中的函数和设置QML中的属性的问题

c++中调用QML中的函数和设置QML中的属性的问题

时间:2023-02-03 11:13:03浏览次数:38  
标签:调用 QVariant 函数 c++ QML include 节点

1.这里主要是介绍,如何在c++中调用QML中的函数和设置QML中的属性的问题

 

 

2.具体代码

 

 

 

 

// UICtest.qml

import Qt 4.7

Rectangle { 

    id: mainWidget;

    width: 640

    height: 480

    function callbyc(v)

    { 

        mainWidget.color = v;

        return "finish";

    }

    Rectangle{ 

        id: secondRect;

        x: 100;

        y: 20;

        width: 400;

        height: 300;

        Rectangle{ 

            x: 10;

            y: 20;

            width: 30;

            height: 40;

            color: "#FF035721"

            Text  { 

                objectName: "NeedFindObj";

                anchors.fill: parent;

                text: "";

            }

        }

    }

}

 

 

// main.cpp

#include <QtGui/QApplication>

#include <QtDeclarative/QDeclarativeView>

#include <QtDeclarative/QDeclarativeEngine>

#include <QtDeclarative/QDeclarativeComponent>

#include <QtDeclarative/QDeclarativeContext>

#include <QtDeclarative/QDeclarativeItem>

#include <QMetaObject>

int main(int argc, char *argv[])

    QApplication a(argc, argv);

    QDeclarativeView qmlView;

    qmlView.setSource(QUrl::fromLocalFile("../UICtest/UICtest.qml"));

    qmlView.show();

    // 获取根节点,就是 QML中 id是mainWidget的节点

    QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(qmlView.rootObject());

    item->setProperty("color", QVariant("blue"));

    // 查找到我们需要的节点根均objectname NeedFindObj 来获得,并设置他的文本属性

    QDeclarativeItem *item1 = item->findChild<QDeclarativeItem *>("NeedFindObj");

    if (item1)

    { 

        item1->setProperty("text", QVariant("OK"));

    }

    // 调用QML中的函数, 分别是 函数所在的对象, 函数名,返回值, 参数

    QVariant returnVar;

    QVariant arg1 = "blue";

    QMetaObject::invokeMethod(item, "callbyc",

                              Q_RETURN_ARG(QVariant, returnVar),Q_ARG(QVariant, arg1));

    qDebug(" %s",returnVar.toString().toLocal8Bit().data());

    return a.exec();

}

 

 

 

 

 

 

 

 

说明:

这里的根节点是id为mainWidget的矩形元素,那么在C++中获取根节点后就可以,直接的设置他的属性了。其他属性也可以同样,调用指定节点内的函数是通过QMetaObject中的invokeMethod 来进行调用的。

 

 

https://blog.csdn.net/weixin_37459951/article/details/68067881

标签:调用,QVariant,函数,c++,QML,include,节点
From: https://www.cnblogs.com/im18620660608/p/17088482.html

相关文章

  • C/C++编译链接
    一、编译链接过程名词解释编译:由编译器对各个源文件进行词法分析、语法分析、语义分析等操作,最终生成多个目标文件。由于这些文件可能存在互相调用对方的函数或变量,还......
  • 现代C++实战30讲
    本文记录学习吴咏炜老师的《现代C++实战》课程的心得体会,记录自认为值得记录的知识点。重新认识的点如果临时对象被绑定到一个引用上,则它的生命周期会延长到跟这个引用......
  • 现代C++实战30讲(2)
    本文记录学习吴咏炜老师的《现代C++实战》课程的心得体会,记录自认为值得记录的知识点。重新认识的点编译期间的多态所有容器类都有begin和end函数成员,这为通用遍......
  • c++学习2 基础关键词
    三volatile强制访问内存在一个变量的频繁使用中,系统为了提高效率,会自动将内存里面的数据放入CPU里的寄存器里。但在某些特殊场景下,放入寄存器这个操作反倒会导致CPU无法......
  • C++ 虚函数底层表达
    转载一篇乐哥的博客,对虚函数,虚函数表和派生类对象赋予给基类指针时地址的变化等会有更深的理解https://mp.weixin.qq.com/s?__biz=Mzk0MzI4OTI1Ng==&mid=2247489554&idx=1......
  • WPF调用winfrom控件
    1.导包在引用处添加System.Windows.Fotms和WindowsFormslntegration2.xaml部分在需要使用控件的页面添加引用xmlns:wf="clr-namespace:System.Windows.Forms;assembly=......
  • C++迭代器种类与编译期间多态
    迭代器分类C++STL中根据移动能力将迭代器分成了5类:InputIterator输入迭代器,只支持operator++操作。OutputIterator输出迭代器,只支持operator++操作。......
  • c++语言程序设计第一章笔记
    在最开始,老师就向我们介绍了计算机语言的发展历史。也就是先前,在计算机刚开始发展的时候,那时候计算机语言与自然语言之间具有很大的鸿沟(计算机只能读懂二进制的0和1),比机器......
  • 子组件向父组件传参后,父组件再次调用子组件方法,子组件中upload为undefined
    需求:代码更改后有几个受影响对象,flag为是则弹出具体信息框,若为否则关闭,并清除信息框信息,信息框中内容还涉及上传文件。实现:由于多个对象涉及复用,则使用父组件调用子组件的......
  • 关于C++的词汇统计
    提问: 输入输出怎么写,希望大家帮忙补充。C++词汇统计把所有单词/短语汇总在一起,找出出现次数最多的那个。输入是一行,为所有单词,由空格隔开。最多有100000个单词。输出一个......