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++...
本系列会介绍几种QML与C++进行数据交互的方法,包括信号槽的链接,QML调用C++类的方法等。 本代码为第二篇《QML 与 C++交互 - 02 C++暴露方法到QML》的示例demo
qml与C++交互代码
本系列会介绍几种QML与C++进行数据交互的方法,包括信号槽的链接,QML调用C++类的方法等。 本文为第一篇:QML访问C++属性。可以访问我的博客查看代码解释。
1. C++ 对象注册到 QML,QML 访问 C++ 对象; 2. QML 暴露对象给 C++ 进行交互; 3. C++ 创建 QML 对象并进行交互; 4. C++ 对象与 QML 通过信号槽交互。 文档详细描述了四种方式的使用
QML c++ 的详细介绍 和大量交互例子
QML与c++交互在地图上增加mark的源代码
博客的相关代码,演示QML与C++的交互。博客地址https://blog.csdn.net/gongjianbo1992/article/details/87965925
关于QML与C++交互具体实例,里面涉及QML与C++进行数据交互等功能
我们知道 ,通过Qt Declarative module ,C++可以动态创建和操纵QML的组件(cpmponents) ,我们利用这些API使用C++来拓展我们的QML程序,反过来也可以将QML嵌入到你的C++程序中。通过Qt的元对象系统( Qt‘s meta...
Qt Quick 是一种高级用户界面技术,使用它可轻松地创建供移动和嵌入式... 研究了几天QML,我想编程人员关心的还是QML怎样与C++ Application交互了。发现网上QT中文资料很少,唉,只能参照官网文档: 一、QML引
Qt 提供了两种在 QML 环境中使用 C++ 对象的方式: 1. 在 C++ 中实现一个类,注册到 QML 环境中, QML 环境中使用该类型创建对象 2. 在 C++ 中构造一个对象,将这个对象设置为 QML 的上下文属性,在 QML 环境中直接...
Qml与C++通信交互Demo,只有最简单的Qml界面调用C++类的函数
Qt Quick技术使得开发者能够快速构建UI,而其所使用的语言...因此QML与C++的交互必然是我们需要掌握的技能。 此次Webinar将向大家介绍QML与C++的交互方式,通过例子来展示应用方法,为我们后续的产品开发提供便利。
使用qml实现的表格控件,支持JSON文件的导入,支持表格的增删改查操作。支持表格的编辑,撤销等操作。同时内嵌搜索功能
c++数据传入qml, qml数据返回给c++,数据互传 ,两种方式
C++与QML的交互是通过注册C++对象给QML环境得以实现的: 在C++实现中,非可视化的型别均为QObject的子类,可视化的类型均为QDeclarativeItem的子类。注意:QDeclarativeItem等同于QML的Item类。 如果用户想要定义...
QML--实现与HTML的交互
1. 把Qt C++中的对象或类型暴露给 QML端,供QML端使用。(官方说法是“嵌入”而非“暴露”,比较文明。- -b) 2. QML中的Signal Handler(相当于Qt C++发送信号给QML端,QML端的Signal Handler进行处理)。 3. 在Qt ...