zoukankan      html  css  js  c++  java
  • QML与c++交互学习笔记(八) qt c++直接调用QML中的函数, 直接设置属性

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


     

    2.具体代码


     


     

    // UICtest.qml import Qt 4.7 Rectangle {     id: mainWidget;      640     height: 480     function callbyc(v)     {         mainWidget.color = v;         return "finish";     }     Rectangle{         id: secondRect;         x: 100;         y: 20;          400;         height: 300;         Rectangle{             x: 10;             y: 20;              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 来进行调用的。


     

    最后所有关于QML和c++交互部分就基本写完,如果想要更多的东西,或者一些其他方法,强烈看看

    http://doc.qt.nokia.com/4.7-snapshot/qtbinding.html,或者帮助文档,(究竟是不是我的文档里面没有还是怎么的)

  • 相关阅读:
    eclipse 设置默认编码为Utf-8
    重新打开Eclipse出现“An internal error has occurred. java.lang.NullPointerException”
    Eclipse启动时出现错误 An internal error occurred during: "Updating indexes"
    eclipse卸载自带maven
    JAVA实现SFTP实例
    springboot-24-restTemplate的使用
    Jmeter在restful风格接口测试中的应用
    Swagger介绍-一套流行的API框架
    SQL 里ESCAPE的用法
    CALL 'SYSTEM' ID 'COMMAND'
  • 原文地址:https://www.cnblogs.com/shihao/p/2532217.html
Copyright © 2011-2022 走看看