QT5发布,最大的变化就是qml版本的升级,扩展了大量的方法,可见QT官方对qml的重视. qml有着传统脚本语言不具备的优势,语法看来像CSS,支持javascript函式调用. 该脚本能与C++进行交互,这是一般脚本所不能的.可以用来方便编写系统控制脚本,无需编译,直接运行. qml原型其实就是QSA(QT4前发布一个js脚本语言,bug比较多,后废弃了. QT4.7后才出现qml)
一. 导入JS代码
qml 通过代码 import "xxx.js" as xx 导入,下面实现定时打印当前时间
testTimer.js // qml不支持setTimeout(),只支持Timer // 打印当前时间 function showTime() { var today=new Date(); var year=today.getFullYear(); var month=today.getMonth(); var day=today.getDate(); var hour=today.getHours(); var min=today.getMinutes(); var sec=today.getSeconds(); console.log("current: "+year+"-"+month+"-"+day+" "+hour+":"+min+":"+sec); } main.qml import QtQuick 1.1 import "testTimer.js" as TestTimer // 导入js脚本 Rectangle { width: 360 height: 360 color: "green" // 启动定时器,打印当前时间 Timer{ id:aTimer running:true repeat:true interval:1000 onTriggered: TestTimer.showTime(); // 调用js显示时间函数 } }
二. 调用C++方法
将C++对象方法加上Q_INVOKABLE 或者声明为槽,都可以被qml访问到
// MyObject.h class MyObject:public QObject { Q_OBJECT public: Q_INVOKABLE QDateTime getCurTime(); public slots: void showMsg(); };
// main.cpp // C++工具方法 MyObject myobj; // 启动脚本解释器 QDeclarativeView *view = new QDeclarativeView; viewer.rootContext()->setContextProperty("myobj",&myobj); // 注入C++对象 view->setSource(QUrl::fromLocalFile("main.qml")); view->show();
// main.qml MouseArea { anchors.fill: parent onClicked: { // 调用c++方法 var s=Qt.formatDateTime(myobj.getCurTime(),"yyyy-MM-dd hh:mm:ss"); console.debug("current: "+s); // 调用c++槽 myobj.showMsg(); console.log('I will quit') Qt.quit(); }
三. 使用C++自定义对象
qml可以使用c++自定义对象,处理自定义对象信号
// PieChart.h // 扩展qml对象,显示一饼图 class PieChart:public QDeclarativeItem { Q_OBJECT // 导出name,color属性供qml访问 Q_PROPERTY(QString name READ name WRITE setName) Q_PROPERTY(QColor color READ color WRITE setColor) public: PieChart(QDeclarativeItem *parent=0); QString name() const; void setName(const QString &name); QColor color() const; void setColor(const QColor &col); void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *); Q_INVOKABLE void clearChart(); signals: void chartCleared(); // 清空图像,在qml处理该信号 private: QString m_name; QColor m_color; };
通过qmlRegisterType() 注册自定义c++对象
// 注册自定义对象,主版本号1,次版本号0,在qml通过名称PieChart访问 qmlRegisterType<PieChart>("Charts",1,0,"PieChart");
调用:
import QtQuick 1.1 import Charts 1.0 // 导入自定义c++对象 Rectangle { width: 360 height: 360 color: "green" Text { text: qsTr("Hello World") anchors.horizontalCenter: parent.horizontalCenter } // 显示自定义饼图,lupdate提取翻译文字因不识别自定义对象,会报错 PieChart{ id: pieChart color:"red" width: 300; height:300 anchors.centerIn: parent onChartCleared: { // 处理自定义对象信号 var msg=qsTr("The chart has been cleared"); console.log(msg); } } }
运行截图:
相关推荐
QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++...
### Qt之QML与C++ 交互 #### 方式1:C++对象注册到QML,QML访问...以上就是Qt中QML与C++交互的四种常见方式。通过这些方式,开发者可以在QML和C++之间建立灵活高效的数据交换和功能协作机制,满足不同应用场景的需求。
C++类需要继承自`QObject`或者其子类,并且包含`Q_OBJECT`宏以启用元对象系统,这是QML-C++交互的基础。此外,如果你想让C++的属性在QML中可读写,需要使用`Q_PROPERTY`宏来声明这些属性: ```cpp class MyClass : ...
QML 与 C++ 交互 QML(Qt Meta Language 或 Qt Modeling Language)是一种基于declarative编程的语言,用于描述用户界面和用户体验。C++ 是一种高性能的编程语言,常用于开发桌面应用程序和移动应用程序。QML 和 ...
### QML与C++交互使用的深入探讨 #### 一、引言 在现代软件开发领域,特别是GUI应用程序的开发过程中,QML与C++的结合使用成为了一种流行且高效的技术方案。Qt框架通过其强大的功能支持,使得开发者能够轻松地实现...
总结来说,QML与C++的交互是Qt开发的关键部分,而暴露C++方法到QML则提供了一种灵活的机制,让我们能够在UI层面上触发底层的业务逻辑。通过定义Q_INVOKABLE方法、注册QML类型以及在QML中调用这些方法,我们可以创建...
在本文中,我们将深入探讨如何在Qt环境中使用QML与C++进行交互,并解决路径中包含中文字符的问题。QML(Quantum Meta Language)是一种声明式语言,用于创建丰富的用户界面,而C++则是一种强大的面向对象编程语言,...
在QML与C++交互的过程中,主要涉及以下几个关键概念: 1. **QQmlEngine**:这是QML的运行时环境,负责解析和加载QML文件,以及管理QML对象的生命周期。 2. **QQmlComponent**:它用于加载和实例化QML文件中的单个...
例如,`untitled33.qml`可能是一个包含QML组件的文件,而`untitled33.cpp/h`则可能是实现了与QML交互的C++类。 总结来说,QML与C++的交互涉及多个层面,包括但不限于:设置上下文属性、动态加载QML组件、注册自定义...
总结来说,QML与C++的交互使得我们在Qt地图开发中能够灵活地管理大量标记,结合QML的声明式语法和C++的高性能处理,可以创建出高效且易于维护的地图应用。同时,这种模式也适用于其他复杂的UI交互和数据驱动的场景。
C++与QML的交互是通过注册C++对象给QML环境得以实现的: 在C++实现中,非可视化的型别均为QObject的子类,可视化的类型均为QDeclarativeItem的子类。注意:QDeclarativeItem等同于QML的Item类。 如果用户想要定义...
4. **QML与C++交互**:在QML中,可以使用`Component.onCompleted`或`Connections`元素来调用C++函数。同时,C++也可以通过`QQmlContext`或`QQmlEngine`的接口访问QML对象。 5. **信号和槽**:利用Qt的信号和槽机制...
首先,我们需要理解QML与C++交互的基础。Qt提供了一个名为`QQmlContext`的类,它可以将C++对象暴露给QML环境。这些对象被称为"上下文属性",QML可以通过它们直接访问C++对象的属性和方法。此外,`QQmlEngine`是QML...
C++与QML的交互:`QQmlContext`和`QQmlEngine` 另一种混合编程的方式是通过QML上下文(`QQmlContext`)和QML引擎(`QQmlEngine`)来在QML与C++之间传递数据和调用函数。这包括: - **设置根对象属性**:在C++中,...
在Qt框架中,C++和QML的交互是构建高效、动态用户界面的关键特性。QML是一种声明式语言,主要用于创建用户界面,而C++则提供了强大的编程能力。以下是如何在QML环境中使用C++对象的详细说明: 1. **在C++中实现一个...
在实际开发中,我们经常需要在C++和QML之间进行数据交互,实现业务逻辑和界面展示的紧密配合。本篇将详细讲解如何在C++与QML之间进行数据通信。 ### 一、C++向QML传递数据 1. **创建Qt对象模型**:首先,你需要...
本项目"Qml与C++通信交互Demo"旨在展示如何实现这种融合,以便开发者能够更高效地开发跨平台应用。 QML是一种基于JavaScript的轻量级脚本语言,用于描述UI元素和它们的行为。QML的声明式语法允许开发者以简洁的方式...
《TableEdit-0.1.5_qml_C++_:基于QML与C++的高效表格编辑器》 TableEdit-0.1.5是一款基于QML和C++技术开发的表格控件,专为处理JSON文件设计,提供丰富的数据操作功能。这款工具的核心优势在于其灵活的用户界面和...