当前位置: 移动技术网 > IT编程>开发语言>C/C++ > Qml和C++混合编程

Qml和C++混合编程

2020年08月12日  | 移动技术网IT编程  | 我要评论
Qml和C++运行环境不同,是两个平行的世界,但Qml和C++支持混合编程。Qml使用C++类和对象C++中的类,注册为Qml环境中的一个类型,在Qml中使用该类型创建对象,使用方法:qmlRegisterType()。C++构造一个对象,将这个对象设置为Qml上下文,在Qml中直接使用该属性,使用方法:view.rootContext()->setContextProperty("classOb", new ClassName())定义C++类继承QObject类或者其派生类。

Qml和C++运行环境不同,是两个平行的世界,但Qml和C++支持混合编程。

Qml使用C++类和对象

  1. C++中的类,注册为Qml环境中的一个类型,在Qml中使用该类型创建对象,使用方法:qmlRegisterType()。
  2. C++构造一个对象,将这个对象设置为Qml上下文,在Qml中直接使用该属性,使用方法:view.rootContext()->setContextProperty("classOb", new ClassName())

定义C++类

  1. 继承QObject类或者其派生类。
  2. 使用Q_OBJECT宏。
  3. 信号和槽可以直接在Qml中使用。
  4. Q_INVOKABLE宏,定义Qml可以访问的方法。
  5. Q_ENUMS宏定义Qml可访问的枚举类。
  6. Q_PROPERTY宏定义Qml可访问的属性。同时可以定义READ,WRITE,NOTIFY的属性对应的方法。
  7. 使用C++类:实现C++类->注册类(qmlRegisterType)->在Qml中导入类型(import)->Qml使用类型实例

C++使用Qml对象

C++通过Qml控件的objectName进行选择。代码如下:

QList<QObject*> rootObjects=engine.rootObjects();
QObject* root=NULL;
for(int i=0; i<rootObjects.size(); i++){
    // 通过objectName属性来获取root对象
    // root对象等同于C++中使用的控件,如QPushButton等,用法相同
    if(rootObjects[i]->objectName()=="root"){
        root=rootObjects.at(i);
    }
}

 

 

 

本文地址:https://blog.csdn.net/quietbxj/article/details/107908616

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网