qml 订阅
QML是一种描述性的脚本语言,文件格式以.qml结尾。语法格式非常像CSS(参考后文具体例子),但又支持javascript形式的编程控制。QtDesigner可以设计出·ui界面文件,但是不支持和Qt原生C++代码的交互。QtScript可以和Qt原生代码进行交互,但是有一个缺点,如果要在脚本中创建一个继承于QObject的图形对象非常不方便,只能在Qt代码中创建图形对象,然后从QtScript中进行访问。而QML可以在脚本里创建图形对象,并且支持各种图形特效,以及状态机等,同时又能跟Qt写的C++代码进行方便的交互,使用起来非常方便。 展开全文
QML是一种描述性的脚本语言,文件格式以.qml结尾。语法格式非常像CSS(参考后文具体例子),但又支持javascript形式的编程控制。QtDesigner可以设计出·ui界面文件,但是不支持和Qt原生C++代码的交互。QtScript可以和Qt原生代码进行交互,但是有一个缺点,如果要在脚本中创建一个继承于QObject的图形对象非常不方便,只能在Qt代码中创建图形对象,然后从QtScript中进行访问。而QML可以在脚本里创建图形对象,并且支持各种图形特效,以及状态机等,同时又能跟Qt写的C++代码进行方便的交互,使用起来非常方便。
信息
支    持
以.qml结尾
外文名
QML
性    质
脚本语言
QML来源
QML是Qt推出的Qt Quick技术的一部分,是一种新增的简便易学的语言。QML是一种陈述性语言,用来描述一个程序的用户界面:无论是什么样子,以及它如何表现。在QML,一个用户界面被指定为具有属性的对象树。 这使得Qt更加便于很少或没有编程经验的人使用。QML实际上是Qt Quick (Qt4.7.0中的新特性)核心组件之一:Qt Quick是一组旨在帮助开发者创建在移动电话,媒体播放器,机顶盒和其他便携设备上使用越来越多的直观、现代、流畅UI的工具集合。
收起全文
精华内容
参与话题
问答
  • QML入门教程:一、QML和QtQuick简介以及QML实例

    万次阅读 多人点赞 2018-04-08 11:44:09
    从 Qt 4.7 开始,Qt 引入了一种声明式脚本语言,称为 QML(Qt Meta Language 或者 Qt Modeling Language),作为 C++ 语言的一种替代。而 Qt Quick 就是使用 QML 构建的一套类库。 QML 是一种基于 JavaScript 的声明...

    从 Qt 4.7 开始,Qt 引入了一种声明式脚本语言,称为 QML(Qt Meta Language 或者 Qt Modeling Language),作为 C++ 语言的一种替代。而 Qt Quick 就是使用 QML 构建的一套类库QML 是一种基于 JavaScript 的声明式语言。在 Qt 5 中, QML 有了长足进步,并且同 C++ 并列成为 Qt 的首选编程语言。也就是说,使用 Qt 5,我们不仅可以使用 C++ 开发 Qt 程序,而且可以使用 QML。虽然 QML 是解释型语言,性能要比 C++ 低一些,但是新版 QML 使用 V8,Qt 5.2 又引入了专为 QML 优化的 V4 引擎,使得其性能不再有明显降低。在 Nokia 发布 Qt 4.7 的时候,QML 被用于开发手机应用程序,全面支持触摸操作、流畅的动画效果等。但是在 Qt 5 中,QML 已经不仅限于开发手机应用,也可以用户开发传统的桌面程序。
    QML 文档描述了一个对象树。QML 元素包含了其构造块、图形元素(矩形、图片等)和行为(例如动画、切换等)。这些 QML 元素按照一定的嵌套关系构成复杂的组件,供用户交互。
    ——摘自《Qt学习之路2》

    helloworld实例:

    新建项目如图:
    这里写图片描述
    选择Qt Quick Application,组件选择Qt Quick 2.1
    这里写图片描述
    创建项目成功之后,Qt会为我们自动生成一系列文件:
    这里写图片描述

    我们真正需要关注的是:main.qml 里面的内容

    import QtQuick 2.1
    import QtQuick.Window 2.0
    
    Window {
        visible: true
        width: 360
        height: 360
    
        MouseArea {
            anchors.fill: parent
            onClicked: {
                Qt.quit();
            }
        }
    
        Text {
            text: qsTr("Hello World")
            anchors.centerIn: parent
        }
    }
    

    如上述代码所示,一个 QML 文档分为 import 和 declaration 两部分。前者用于引入文档中所需要的组件(有可能是类库,也可以是一个 JavaScript 文件或者另外的 QML 文件);后者用于声明本文档中的 QML 元素。
    每一个 QML 有且只有一个根元素,类似于 XML 文档。这个根元素就是这个 QML 文档中定义的 QML 元素,在这个例子中就是一个 Window 对象。注意一下这个 QML 文档的具体语法,非常类似于 JSON 的定义,使用键值对的形式区分元素属性。所以我们能够很清楚看到,我们定义了一个窗口,可见性为真,宽度为 360 像素,高度为 360 像素。记得我们说过,QML 文档定义了一个对象树,所以 QML 文档中元素是可以嵌套的。在这个窗口中,我们又增加了一个 Text 元素,顾名思义,就是一个文本。Text 显示的是 Hello World 字符串,而这个字符串是由 qsTr()函数返回的。qsTr()函数就是 QObject::tr()函数的 QML 版本,用于返回可翻译的字符串。Text 的位置则是由锚点(anchor)定义。示例中的 Text 位置定义为 parent 中心,其中 parent 属性就是这个元素所在的外部的元素。anchors.centerIn: parent同理,我们可以看到MouseArea 是充满父元素的。MouseArea 还有一个 onClicked 属性。这是一个回调,也就是鼠标点击事件。 MouseArea可以看作是可以相应鼠标事件的区域。当点击事件发出时,就会执行 onClicked 中的代码。这段代码其实是让整个程序退出。注意我们的 MouseArea充满整个矩形anchors.fill: parent,所以整个区域都可以接受鼠标事件。
    运行效果示例:
    这里写图片描述
    接下来我们可以改变 main.qml 文件中的“Hello World”字符串,不重新编译直接运行,就会看到运行结果也会相应的变化。这说明 QML 文档是运行时解释的,不需要经过编译。所以,利用 QML 的解释执行的特性,QML 尤其适合于快速开发和原型建模。另外,由于QML 比 C++ 简单很多,所以 QML 也适用于提供插件等机制。

    展开全文
  • 《细说 QML

    万次阅读 多人点赞 2017-02-27 19:07:14
    原本想给本系列文章起一个很“叼”的名字,无奈笔者语言匮乏,绞尽脑汁才想出一个还算凑合的名字 - 《细说 QML》,关于“细说”,新华词典中有记载: 细说 [xì shuō]:详细地解说,也叫“细谈”。 果然,不仅...

    关于命名

    原本想给本系列文章起一个很“叼”的名字,无奈笔者语言匮乏,绞尽脑汁才想出一个还算凑合的名字 - 《细说 QML》,关于“细说”,新华词典中有记载:

    • 细说 [xì shuō]:详细地解说,也叫“细谈”。

    果然,不仅意美、音美、而且形更美。。。perfect!

    从现在开始,我们将一起走进 QML 的世界。在这里,你不仅能够体验到 QML 的魅力,感受到编程的快乐,还可以顺便学习一门语言,成为一名合格的 Qter。

    Ready, Let’s go!

    | 版权声明:一去、二三里,未经博主允许不得转载。

    资料大全

    1. Qt 资料大全

    漫谈 QML

    1. 初识 QML
    2. Qt Widgets、QML、Qt Quick 的区别
    3. 将 QML 与 Qt Widgets 相结合

    QML 基础

    1. 创建 Qt Quick 项目
    2. 值得纪念的时刻 - Hello, QML!
    3. QML 语法基础
    4. QML 运行环境
    5. QML 使用资源系统
    6. QML 静态值与属性绑定
    7. QML 信号和信号处理器程序
    8. QML 编码约定

    QML与C++集成

    1. 将 C++ 对象嵌入到带有上下文属性的 QML 中
    2. 在 C++ 中与 QML 对象交互
    3. 将 C++ 对象暴露给 QML

    文档与示例

    文档,一个神奇的东西。。。。六脉神剑的剑谱、独孤九剑的剑诀、辟邪剑谱的袈裟。。。无一例外,都是大牛的必备之物,有了这些文档,他们才可以独步于天下,笑傲于江湖!所以呢,文档很重要,要想在编程的道路上有所升华,看文档是必须的。

    QML 最好的文档就是 Qt Assistant(助手),里面包含了所有的 QML 相关类 API,以及各种示例。。。毫不夸张的说,它胜过所有的教程、老师、以及大牛们,为什么呢?其中原因,要等待看官看懂了之后,有了体会感悟方能明白。

    很多人每天吼吼着要源码,岂不知最经典的就是 Qt 中自带的示例,既全面又详细。进入 Qt Creator,选择:欢迎 -> 示例,输入关键字“QML”,就会出现大量 QML 相关的示例。

    Good Luck!

    最后的话

    如果你觉得讲得不错、认为对你有那么一丝丝帮助,你可以把本系列文章珍藏起来。。。

    如果它可以给予你一定的引导,可以微微的动一动手指,把它顶(赞)起来,同时分享给更多的 Qter。。。

    当你成为 Qt 大牛时,最应该感谢的是自己,如果也顺便感谢一下本系列文章,那是我的福分,感激不尽!

    持续更新中……

    展开全文
  • Qt5/QML界面开发(一)

    2020-08-05 10:58:22
    Qt5/QML界面开发(一) 是Qt最新推荐的UI开发框架,基于OpenGL(ES)场景与图形实现,性能卓越的图形;高效的开发、前后端分离、主要基于Qml和Javascript开发,后端C++\Python\Java\Go等;强大的社区支持;跨平台移植: ...
  • 跟着项目学习QT QML跨平台移动APP编程技术,从QML的基本组件Lable、TextField到StackView、ListView,再到C++的算法、QML和C++的结合,最后到部署在IOS和Android平台,全方位的体验跨平台移动APP的开发流程及QT QML...
  • Qt5 Qml 界面开发(二)

    2020-09-14 19:16:14
    详细讲解Qt Quick Controls 2组件、Qml数据展示及Canvas画布。从实战案例出发讲解HMI屏及桌面软件界面开发。
  • qml(Qt Quick)做界面

    千次阅读 2019-03-22 15:09:00
    qml(Qt Quick)做界面 来源https://www.zhihu.com/question/24880681/answer/29324824 本人是Qt初学者,正在写一个会计小软件(Linux桌面版)。看了Qt的介绍,觉得用qml(Qt Quick)做界面非常机动快速,但是...

    qml(Qt Quick)做界面

    来源  https://www.zhihu.com/question/24880681/answer/29324824

     

    本人是Qt初学者,正在写一个会计小软件(Linux桌面版)。看了Qt的介绍,觉得用qml(Qt Quick)做界面非常机动快速,但是qml(Qt Quick)处理复杂的业务逻辑就有点力不从心了。
    不知道能否用qml(Qt Quick)做界面,用C++(Qt)实现业务逻辑?如果可以,大概的思路是怎么样?
     

    -----------------------------

    题主你好,你说的这种思路是目前Digia主推的一种思路。(今年去参加Qt开发者大会的时候,几乎一半的讲座都会推荐这种用法。)

    所以,如何结合QML和C++,官网上会有很多的例子和教程,希望你仔细看看。(另外,鉴于4.8时代的Qt Quick的问题(bug)还不少,所以建议使用最新版的Qt5.3+来做这样的试验。)

    这是我随手找到的:Introduction_to_Qt_Quick_for_Cpp_developers
    Writing QML Extensions with C++

    一个更详尽的例子:
    Qt Quick 之 QML 与 C++ 混合编程详解

    还有这个制作五子棋小游戏的教程,非常有意思。:
    用的Qt Quick版本较老,但思路可以借鉴。

    不谢。

    编辑于 2014-08-18

     

    -----------------------------

    关于QML和C++的集成,参考文档:

    QtQuickControls以及QtQuickControls2的最新进展,

    QtCS2015 QtQuickControls2
    Background
    QtQuick.Controls 1 has tons and tons of objects per control
    Overview
    QtQuick.Controls 2 has interaction logic in C++, greatly decreases object overhead and number of contexts
    QtQuick.Controls 2 has visual items still in a (thin) QML layer
    Styling, theming and customization
    Native/platform styles currently out of scope
    Would be in a separate (derived) imports?
    Currently QtQuick.Controls 2 has a simple themable QML layer
    Ongoing work adapting the palette concept from widgets (QTBUG-45839)
    Parts of controls can be replaced with custom delegates
    Status
    Popup items vs. popup windows
    Text selection handles via IM
    No scaling (logical units?) thought of yet
    Discussion
    Accessibility in the QML layer? Needed as it's private from QtQuick
    Some embedded users don't want accessibility. Seems "Short-sighted".
    Continue with controls 1 until native/desktop gets brought into the controls 2 idea
    As in done and maintained, but R&D on controls 2

    大家可以参考:

     

    =============== End

     

    转载于:https://www.cnblogs.com/lsgxeva/p/10578362.html

    展开全文
  • 使用QML进行界面开发

    万次阅读 2018-08-24 16:48:37
    1、概述    ESM6802是英创公司推出的基于Freescale i.MX6DL双核处理器(ARM Cortex-A9,...ESM6802支持Qt 5.8版本,支持使用QML进行界面开发,而且能够利用硬件图像加速处理模块优化QML构建的图像界面的渲染。...

    1、概述

     

      ESM6802是英创公司推出的基于Freescale i.MX6DL双核处理器(ARM Cortex-A9,主频1GHz)的高性能工控主板,imx6dl内部带有硬件3D、2D图像处理模块,能够对图像界面绘制进行硬件加速,使得应用程序显示更加快速流畅。ESM6802支持Qt 5.8版本,支持使用QML进行界面开发,而且能够利用硬件图像加速处理模块优化QML构建的图像界面的渲染。本文将会简单介绍一下QML的基础知识,给客户提供一种新的界面的开发方案。

     

      QML是Qt提供的一种描述性的脚本语言,类似于CSS(Cascading Style Sheets),可以在脚本里创建图形对象,并且支持各种图形特效,以及状态机等,同时又能跟Qt写的C++代码进行方便的交互,使用起来非常方便。采用QML加插件的方式主要是为了将界面设计与程序逻辑解耦,一般的系统开发中界面设计的变动往往多于后台逻辑,因此采用QML加插件的方式将界面设计与逻辑分离有利于开发人员的分工,加速产品迭代速度,降低后期维护成本。而且QML解释性语言的特性使得其语法更加简单,可以将界面设计部分交给专业的设计人员开发,而不要求设计人员会c++等编程语言。Qt底层对QML做了优化,将会优先使用硬件图形加速器进行界面的渲染,也针对触摸屏应用做了优化,使用QML能够更简单快捷的搭建流畅、优美的界面。QML也支持嵌入Javascript处理逻辑,但是底层逻辑处理使用Qt C++编写插件,能够更好的控制数据结构,数据处理也更加高效,Qt提供了多种方式将C++数据类型导入QML脚本中,更多详细资料可以查看Qt官方的文档,本文将简单介绍一下QML语言的语法以展示QML相对于以往的Qt C++界面编程的区别,文中所有代码均在ESM6802 Linux上运行测试过了,有需要的客户可以向我们索取,QML文件是脚本文件,不需要编译,可以使用/usr/bin/qt5/qmlscene程序直接打开QML脚本文件查看效果。

     

    2、QML基础介绍

     

      QML将界面分解为一个一个小的元素,通过使用QML描述各元素的排列以及对特定事件的响应来搭建一个动态的界面。QML中的元素是以层级的形式进行描述的,子元素继承父元素的坐标系统,子元素的坐标以父元素作为参考,父元素的左上角为子元素的坐标原点,子元素中可以以parent关键字引用父元素。

     

      在一个QML文件中,每个元素都可以设定唯一的id,在其他元素中可以引用id来更改此元素的属性等。QML提供一系列内置的元素类型供开发中快速搭建界面,包括最常用的Rectangle、Image、Text、MouseArea、Item等。元素都有自己内置的属性,比如之前介绍的id,以及用于指定坐标的x、y,和width、height等,同时也支持使用property关键字自定义属性。一个简单的QML文件如下:

     

     

    import QtQuick 2.0

     

    Rectangle {

        width: 100

        height: 100

        color: "red"

    }

     

     

      这个QML文件将会展示一个红色的正方形,如下图:

     

    使用QML进行界面开发.gif

     

      在上面的例子中为Rectangle增加radius属性的设置就可以得到圆角长方形:

     

     

    Rectangle {

        width: 100

        height: 100

        color: "red"

        radius: 10

    }

     

     

    使用QML进行界面开发.gif

     

      使用Rectangle就可以构建出消息展示框和按钮等大部分的界面元素了,而Text类型可以用于在Rectangle中增加文字信息,Image可以加载图片,MouseArea提供鼠标/触摸屏事件,组合使用这几个元素就能够快速的搭建基本的交互界面了。

     

      当然现实开发中由于需要展示的数据往往会以数组等更复杂形式进行管理,他们具有相同的属性,需要展示的外形效果(背景、对事件的相应)是一样的,而每个元素的需要展示的内容不一样,这时就可以使用Row、Column、ListView、GridView等更复杂的元素。这类元素的设计理念是将数据与展现效果分开,数据用model来存放,而展示效果用view来描述,model和view通过delegate联系起来,一个简单的ListView的用法示例如下:

     

     

    Background {

      width: 480

      height: 80

      ListView {

      anchors.fill: parent

      anchors.margins: 20

      spacing: 4

      clip: true

      model: 100

      orientation: ListView.Horizontal

      delegate: numberDelegate

    }

    Component {

      id: numberDelegate

      GreenBox {

        width: 40

        height: 40

        text: index

      }

    }

     

     

      上面中的GreenBox是使用Rectangle元素和Text元素构建的长方形,上面的代码显示效果如下:

     

    使用QML进行界面开发.gif

     

      QML也内置了一些类型来描述显示元素的转变、动画效果,例如PropertyAnimation、NumberAnimation、ColorAnimation、RotationAnimation以及State、Transition等,使用这些类型能够快速实现界面的动画效果,比如下面展示一个绿灯闪烁的界面的QML代码:

     

     

    import QtQuick 2.0

     

    Rectangle {

        id: backgroud

        width: 100

        height: 100

        color: "grey"

     

      Rectangle {

        id: greenlight

        width: 60

        height: 60

        x: 20

        y: 20

        color: "green"

        radius: 30

        Component.onCompleted: flick.start()

     

        SequentialAnimation{

          id: flick

          ColorAnimation { target: greenlight; properties: "color"; to: "black"; duration: 1000 }

          ColorAnimation { target: greenlight; properties: "color"; to: "green"; duration: 1000 }

          ColorAnimation { target: greenlight; properties: "color"; to: "black"; duration: 1000 }

          ColorAnimation { target: greenlight; properties: "color"; to: "green"; duration: 1000 }

          ColorAnimation { target: greenlight; properties: "color"; to: "black"; duration: 1000 }

          }

      }

    }

     

     

      上面的代码会使id为greenlight的图形从绿色变为黑色,在由黑色变为绿色,重复三次,模拟绿灯闪烁的效果。由于动画效果不方便以图片展示,客户可以自行复制上面的代码运行查看效果。

     

    使用QML进行界面开发.gif

     

      从上面的介绍可以看到,QML的语法非常简单,整个文件的结构很清楚,比起使用Qt C++开发界面的更加简单快速,不需要管理各种不同的类(class),降低了编程难度,而且整个界面元素以长方形为基础来搭建,非常适合触摸屏设备。另外QML文件不需要编译,可以直接运行,搭建的界面能够快速的预览然后进行优化,也一定程度上加快了开发速度。当然由于QML的设计理念,QML只是对界面显示进行描述,虽然可以内嵌JavaScript处理数据,但是处理数据的效率不高,所以显示所需数据的生成、管理还是建议使用Qt C++进行处理。这样底层数据能够高效的进行处理,而上层界面又能够快速搭建,数据处理和界面构建分离,程序开发分工也更加明确,也更加方便程序的维护和更新换代。

     

    3、使用C++扩展QML

     

      Qt提供了C++的函数接口来方便的将C++程序中的数据提供给QML文件进行显示,这些接口可以分为两种,一种是直接在C++中注册QML类型,然后在C++中执行QML文件,这样QML文件中就可以直接访问注册的类型;另一种是创建QML插件,之后可以在QML文件中引入插件,作为独立的类型进行实例化。限于篇幅,我们这里只简单介绍一下创建QML插件,QML文件代码基于我们之前一片文章《Linux双进程应用示例》中介绍的,插件的功能我们不再具体介绍,只在此使用代码进行展示。

     

      使用qtcreator的指导界面创建QML插件,设置插件名称为com.emtronix.qmlcomponents,在QML中通过语句import com.emtronix.qmlcomponents加载插件,插件编译过后以共享库的形式存在,需要放到/usr/lib/qt5/qml/com/emtronix/目录下:

     

    使用QML进行界面开发.gif

     

    使用QML进行界面开发.gif

     

      插件使用Qt C++进行开发,实现插件的C++类需要继承QQmlExtensionPlugin类,并且实现registerTypes()函数,如下:

     

     

    #include <QQmlExtensionPlugin>

    class MsgClientPlugin : public QQmlExtensionPlugin

    {

        Q_OBJECT

        Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)

    public:

        void registerTypes(const char *uri);

    };

    void MsgClientPlugin::registerTypes(const char *uri)

    {

        // @uri com.emtronix.qmlcomponents

        qmlRegisterType<MsgClient>(uri, 1, 0, "MsgClient");

    }

     

     

     

      上面的代码qtcreator会自动生成,MsgClient类即为这个插件注册的新的QML类型,之后在QML文件中使用import语句加载插件,就可以在QML文件中实例化MsgClient类型了。

     

     

    import com.emtronix.qmlcomponents 1.0

    MsgClient{

      id: msgclient

    }

     

     

      实现MsgClient类与Qt中其他的类类似,只要注意需要在QML中能访问的变量需要用Q_PROPERTY宏定义为MsgClient的属性,而需要在QML文件中访问的函数需要用Q_INVOKABLE进行修饰,如下:

     

     

    class MsgClient : public QQuickItem

    {

        Q_OBJECT

        Q_DISABLE_COPY(MsgClient)

        Q_PROPERTY(int m_interface READ interface WRITE setif NOTIFY ifChanged)

        Q_PROPERTY(QString rmsg READ rmsg WRITE setRmsg NOTIFY rmsgChanged)

        Q_PROPERTY(QString smsg READ smsg WRITE setSmsg NOTIFY smsgChanged)

        Q_PROPERTY(int serverConnection READ serverConnection NOTIFY serverConnected())

        Q_PROPERTY(DynamicEntryModel* pinstate READ pinstate WRITE setPinState NOTIFY pinStateChanged)

        Q_PROPERTY(DynamicEntryModel* outSwitch READ outSwitch WRITE setOutSwitch NOTIFY outSwitchChanged)

    public:

        MsgClient(QQuickItem *parent = nullptr);

        ~MsgClient();

        Q_INVOKABLE void getAll();

        Q_INVOKABLE void getNew();

     

     

      使用slots定义的函数也可以在QML中直接访问,而使用signals定义的消息也可以在QML文件中访问:

     

     

    public slots:

        void sendMsg();

        void setPinState(DynamicEntryModel* obj) { Q_UNUSED(obj) };

        void setOutSwitch(DynamicEntryModel* obj) { Q_UNUSED(obj) };

        ……….

    signals:

        void ifChanged(int id);

        void newMsgRcved(void);

        void rmsgChanged(void);

        void smsgChanged(void);

        void sendMsgSignal(void);

        void serverConnected(void);

     

     

      这些函数以及变量都是正常的C++函数和变量,使用C++来实现函数需要实现的功能以及操作变量,例如sendMsg实现如下:

     

     

    void MsgClient::sendMsg()

    {

        struct msg_head buf_h;

        sprintf((char *)&buf_h.to[0], "S1");

        int buf_lenth = m_smsg.size();

        buf_h.lenth = buf_lenth;

        printf("Client sending msg: %d bytes\n", buf_lenth);

        write(sockedfd, (void *)&buf_h.to[0], 6);

        write(sockedfd, (void *)m_smsg.data(), buf_lenth);

        return;

    }

     

     

      signals信号的访问需要做一定的转换,例如上面的ifChanged消息,在QML中需要使用onIfChanged来访问,即将函数首字母大写,然后在前面加上‘on’。

     

      MsgClient类型在QML中的实际调用如下:

     

     

    MsgClient{

      id: msgclient

      m_interface: interfaceId.currentButton

      onNewMsgRcved:{

        getNew()

        console.log("got new msg" + rmsg)

      }

      onIfChanged: {

        console.log("interface changed to " + msgclient.m_interface)

        getAll()

        console.log("all history msg:" + rmsg)

      }

      onServerConnected: {

        notReady.destroy()

      }

    }

     

     

      可以见到MsgClient类型的使用和QML内置的类型使用没有什么区别,而插件中定义的signals消息以及其他可调用的函数方法也可以在QML中直接访问,MsgClient本身并不会产生显示输出,只是处理数据然后提供给QML其他的类型进行显示。我们使用QML搭建了整个显示界面,显示效果如下:

     

    使用QML进行界面开发.gif

     

      有兴趣的客户可以向我们索要例程的源码文件。

     

    4、总结

     

      ESM6802带有GPU硬件加速模块,能够加速QML的渲染,而且QML语法简单,使用QML进行程序开发能够快速的构建流畅的交互式界面,同时使用QML开发使得界面开发与程序数据处理、硬件管理分开,明确程序开发的分工,降低程序维护成本。对于工业控制系统来说,将界面与底层硬件管理分开,一定程度上增加了底层硬件管理部分的程序的稳定性,而界面又可以实现快速的迭代,适应市场的需求,用户在使用过程中可以考虑使用这种方式进行程序开发。有兴趣的客户可以参考更多的网上资料以及Qt的官方文档。在ESM6802的使用过程中如有问题可以和我们联系。

     

            成都英创信息技术有限公司 http://www.emtronix.com

            原文链接 http://www.emtronix.com/article/article20181109.html

    展开全文
  • QMl 组件(一)

    2019-08-29 15:24:25
    QML 自定义插件之轮播 效果如下 组件代码如下所示 import QtQuick 2.12 import QtQuick.Controls 2.5 Rectangle { width: parent.width height: parent.height SwipeView { id: view currentIndex: 0 ...
  • QML 语言基础

    万次阅读 多人点赞 2014-06-06 00:30:04
    在《Qt on Android:Qt Quick 简介》中我们提到 QML 语法和 Json 类似,请参考《Qt on Android: http下载与Json解析》查看 Json 语法。当然这里我们是期望从零开始也能学会 QML ,所以呢,你也可以直接往下看。
  • 解读QML之三

    万次阅读 2013-02-28 23:31:22
    QML语法 1.QML基本语法 1.1导入声明  导入声明允许客户端告诉QML引擎可以在QML文档中使用哪些模块,JavaScript资源以及组件目录。文档中可以使用的类型依赖于在文档中导入的模块、资源以及目录。 导入类型  ...
  • Qt Quick 之 QML 与 C++ 混合编程详解

    万次阅读 多人点赞 2014-07-04 12:22:34
    但它不是万能的,也有很多局限性,原来 Qt 的一些技术,比如低阶的网络编程如 QTcpSocket ,多线程,又如 XML 文档处理类库 QXmlStreamReader / QXmlStreamWriter 等等,在 QML 中要么不可用,要么用起来不方便,...
  • Qt Widgets、QMLQt Quick 的区别

    万次阅读 多人点赞 2017-01-06 19:15:51
    简述 看了之前关于 QML 的一些介绍,很多人难免会有一些疑惑: Q1:QMLQt Quick 之间有什么区别?...Q4:Qt Widgets 和 QML/Qt Quick 哪个更好? 简述 QML VS Qt Quick 从概念上区分 从模块上区分 Q
  • QtQml应用程序的性能考虑与建议 1、时间考虑 作为一名程序开发者,应该努力使渲染引擎的刷新率维持在60fps,也就是说在每帧之间大约有16ms,这段时间包括了基本图元在图形硬件上的描画。具体内容如下: >尽可能...
  • qmlQt数据交互

    2016-12-26 22:31:22
    qml其实也是基于qt框架上的,所以很多地一些知识都是从C++哪里可以找得到原型的。在使用qml开发界面就会少不了要与从qt进行数据的交换了。qml负责ui部分,而qt负责逻辑控制部分,各分职责。为什么要这样呢?qml作为...
  • QTQML与C++混合编程详解

    千次阅读 多人点赞 2014-12-29 20:37:06
    1、QML与C++为什么要混合编程 ...Qt集成了QML引擎和Qt元对象系统,使得QML很容易从C++中得到扩展,在一定的条件下,QML就可以访问QObject派生类的成员,例如信号、槽函数、枚举类型、属性、成员函数等。
  • 使用QML 布局Qt for Android

    千次阅读 2017-12-22 22:19:04
    HanNetWork.h #ifndef HANNETWORK_H #define HANNETWORK_H #include #include #include #include #include #include #include class HanNetWork:public QObject { Q_OBJECT private: QString * getUrl;
  • QT安装QML环境配置与QML学习指南

    千次阅读 2017-02-17 15:53:00
    QT安装 QML环境配置 QML学习指南
  • 附网址:http://qt-project.org/doc/qtcreator-3.1/creator-using-qt-quick-designer.html Using Qt Quick Designer
  • 文章目录1、简介2、效果图3、三种实现方式3.1、QWidget的mask遮罩3.1.1、bb叨3.1.2、核心源码3.2、QML的QtGraphicalEffects遮罩3.2.1、bb小叨3.2.2、核心源码3.3、QGraph的三板斧3.3.1、bb一小会儿3.3.2、核心源码 ...
  • QtQML中的JavaScript用法详解

    千次阅读 2018-03-14 14:10:36
    熟悉JavaScript的应该都...QML是对JavaScript的扩展,提供了JS主机环境,用法相似,但有些地方与浏览器/服务器端提供的JS主机环境(如Node.js)是不同的,用起来又有一些限制,下面列举一些常用的方法。 1、QML...
  • QMLQt Widgets 相结合

    万次阅读 多人点赞 2017-08-10 11:25:55
    在使用 Qt Widgets 时,经常要实现一些比较炫酷的效果(例如:滑动、翻页),这时选择 QML 会显得非常简单。 那么,问题来了: - 能不能将 QMLQt Widgets 结合在一起使用? - 如果能,都有什么方式? - QML 和...
  • 嵌入式Linux基于QML开发QtMultimedia应用

    千次阅读 2018-06-28 13:50:41
    另外对于多媒体应用非常重要的一点是,基于QML/QT Quick 的应用程序可以直接调用GPU进行加速,这大大提高了多媒体应用在嵌入式系统环境下的处理效率和资源占用,因此本文就基于QMLQT Multimedia组件介绍多媒体...
  • Qt:通过QML Profiler分析程序性能问题

    千次阅读 2017-03-15 15:41:35
    对于一个程序的开发,性能优化是开发中的一个重要步骤。我们肯定不希望开发出来的程序表现出卡顿,最好是处处流畅,丝滑般的体验。
  • QtQml 应用程序的性能考虑与建议

    千次阅读 2016-05-21 13:49:32
    QtQml 应用程序的性能考虑与建议
  • QMLQTQT Quick关系

    千次阅读 2017-03-05 23:46:40
    文章纯转载:原博客 ...看了之前关于 QML 的一些介绍,很多人难免会有一些疑惑:Q1:QMLQt Quick 之间有什么区别? Q2:QtQuick 1.x 和 QtQuick 2.x 之间有
  • Qt QML 入门 — 使用C++定义QML类型

    千次阅读 2013-07-05 10:34:03
    如果一个C++类继承自QObject,如果需要在QML中使用创建对象,则需要注册为可实例化的QML类型。 使用qmlRegisterType()注册可实例化的QML类型,具体查看qmlRegisterType()的文档说明。 //Message.cpp class Message...
  • QtQml交互的小Demo

    2017-10-26 14:03:40
    1、控制界面 控制界面借了qwt,以及一些简单的Qt鼠标事件,先上效果图,有图有真相。    其中大圆表示虚拟摇杆,可控制飞机姿态,条形表盘为Qwt所做显示姿态角,滑块表示直升机油门。cpp代码如下:  #inclu
  • Qt5.12中,QtQuick 2 添加了 TableView 组件,功能和 QtQuickControl 1 中的 TableView 类似,但是接口大不一样(QtQuick Control 1已经处于弃用状态,不建议使用)。 Qt Creator中有两个 QtQuick 2 TableView 的...
  • QMLQtQuick2.0以上常用控件

    千次阅读 2018-08-09 15:19:53
    QML Type 1.Container 2.DelayButton 3.Dial 4.DialogButtonBox 5.Dialog 6.Drawer 7.Menu 8.MenuBar 9.Overlay 10.PageIndicator 11.RangeSlider 12.ScrollView ...
  • Qt Quick 技术的引入,使得你能够快速构建 UI ,具有动画、各种绚丽效果的 UI 都不在话下。...本例子代码实现将基于QT.6 QML开发的模块编译成可以在VS环境中直接使用的DLL库文件,并举例使用QZXing识别二维码。

空空如也

1 2 3 4 5 ... 20
收藏数 416,495
精华内容 166,598
关键字:

qml