QML编程 基础 小白

2023-10-27

QT += quick   //添加quick模块
QQuickView //视图 用来链接QML和程序
QQuickView viewer;//Quick视图

 viewer.setSource(QUrl(QLatin1String(
 "qrc:///qml/qmlvideofx/Main.qml")));//加载视图QML文件
 viewer.setResizeMode(QQuickView::
 SizeRootObjectToView);//视图将自动将根项调整为视图的大小
 viewer.show();//显示

QQmlApplicationEngine //qml引擎 用来链接程序和qml文件

QT += qml

QQmlApplicationEngine ::load(QUrl(QLatin1String(
"qrc:///qml/qmlvideofx/Main.qml")));//加载QML文件(需链接信号与曹)



[signal] void QQmlApplicationEngine::
objectCreated([QObject](../qtcore/qobject.html#QObject) **object*, 
const [QUrl](../qtcore/qurl.html) &*url*)

该信号在对象完成加载时发出。如果加载成功,对象包含一个指向加载对象的指针,
否则指针为空。还提供了对象来自的组件的url。

注意:如果组件的路径是作为包含相对路径的QString提供的,
那么url将包含文件的完全解析路径。-

如果要在QML中调用c++中得函数 那么在定义函数时须在返回值前面添加一个标记 Q_INVOKABLE(注册一个方法到QML) 或者是qt中得槽函数

将c++对象作为属性注册到QML

#include<QQmlContext>
    //上下文允许将数据公开给由QML引擎实例化的QML组件。
    
   QQuickView viewer;//视图
   QQmlContext*x=view.rootContext();//返回上下文里的根指针QQmlContext类型
   xxx data;//自定义类对象
   x->setContextProperty("在QML中访问的自定义对象名 xxx",&data);
   /*注册一个对象到QML    设置属性将&data注册到QML中data是自定义类对象
    这样在 qML中就可以使用自定义类对象的方法了在自定义类中 
    data对象的方法需加 Q_INVOKABLE  */
    
    //QML中
    import QtCharts 2.0
    
    Item //QML中最基本得对象
    {
        xxx.xxx//这里就是自定义对象名,和他的方法
        Text
        {
          text:  
        }
      //可声明一些属性或者添加一些对象
    }
    
    
    
       viewer.setSource(QUrl(QLatin1String(
        "qrc:///qml/qmlvideofx/Main.qml")));//加载视图QML文件
    
    
       viewer.setResizeMode(QQuickView::
       SizeRootObjectToView);//视图将自动将根项调整为视图的大小
       viewer.show();//显示

在c++中调用QML中的函数

//QML中

import QtCharts 2.0

Item //QML中最基本得对象
{
    
    Text
    {
        id:qmlf
      function qmlFunction(msg)//QML中自定义函数
      {
          console.log("打印",msg)
              return "abc"
          
      }
        qmlFunction("数据")//QML中调用自定义函数
    }
    
    
    
    
  //可声明一些属性或者添加一些对象
     qmlf.qmlFunction("数据")//QML中调用自定义函数
}

程序中用引擎

QQmlApplicationEngine  engine;//qml引擎 用来链接程序和qml文件
QQmlCompoent compen(&engine,"QML文件路径");
//QML组件并添加到引擎//如果路径是在下层目录需加../否则直接写名称即可

QObject *object=compen.create();//创建一个组件并用QObject指针指向他
QVariant msg="hello qml";//QVariant对象每次保存单个类型()的单个值。
QVariant retVal;



QMetaObject::invokeMethod(obj, "qmlFunction",  
                                                          
Q_RETURN_ARG(QVariant,retVal),//这个是返回值


Q_ARG(QVariant, msg));//这个是传参

// Q_RETURN_ARG,Q_ARG必须指定QVariant类型 //程序中调用QML函数

c++中调用QML中的信号
import QtCharts 2.0

Item //QML中最基本得对象
{
    Item
    {
      id:item
      width:100
      height:100
      signal:qmlsignal(string msg)
  
      MouseArea//鼠标
      {
        anchors.fill:parent//鼠标的点击的区域为父窗口的区域
        onClicked:item.qmlSignal("wai")//鼠标点击了发射信号
      }
      
    }
  //可声明一些属性或者添加一些对象
}

c++程序中

#include<QQuickItem>//Quick项
QQuickView viewer(QUrl(QLatin1String(
"qrc:///qml/qmlvideofx/Main.qml");//视图

QObject*item=viewer.rootObject();//返回跟对象 QQuickItem类型   
                    
xxx xxx;//自定义类
QObject::commect(item,SIGNAL(
qmlSignal(QString)),&xxx,SLOT(自定义类的槽函数(QString)));                       
  viewer.show();//视图显示                     


QML

QML支持许多基本类型。
基本类型是引用简单值的类型,例如int或string。这与QML对象类型形成对比,QML对象类型是指具有属性、信号、方法等的对象。与对象类型不同,基本类型不能用于声明QML对象:例如,不可能声明int{}对象或size{}对象。

基本类型可指:
单个值(例如int指单个数字,var可以指单个项目列表)

包含一组简单属性-值对的值(例如,大小指v)

mport QtQuick 2.0

import QtCharts 2.0

Item //QML中最基本得对象
{
    Item
    {
      signal:QML自定义信号
      text:  
    }
  //可声明一些属性或者添加一些对象
}

QML设计模式 QT其他项目Qt Quick UI

demo

import QtQuick 2.0

Rectangle//矩形组件 定义函数和调用
{
    id:murect
    width: 200
    height: 200



    //QML中的函数 参数无需指定类型
        function init(y)
        {
            console.log("控制台的日志" + y ) //后面加一个参数传进来的
        }//函数

    MouseArea//鼠标活动区域
    {
        anchors.fill: parent//锚 鼠标活动区域为父部件的所有区域
        onClicked:murect.init("kongzhi")//点击事件槽函数

    }


}
//定义信号和调用*************************************************
Item//通常作为容器
{
    width:5000
    height: 5000
    MouseArea//鼠标活动区域
    {
        anchors.fill: parent//锚 鼠标活动区域为父部件的所有区域
        onClicked:zhang.btnClicked()//点击事件发送信号

    }




    Rectangle//自定义信号槽函数
    {
        id:zhang
        x:200+500
        y:250
        z:3
        width: 200
        height: 200
        color: "pink"

        signal btnClicked//信号
        onBtnClicked: //槽函数
        {
             console.log("控制台的日志")
        }




    }
//**************************************************************
    Image //图片
    {
        //id: li
        //x:250
        //y:250
        width: parent.width
        height: parent.height
        source: "li.jpeg"//相对路径
        fillMode:Image.Tile//填充方式 (帮助文档)
        opacity:0.8//透明度
        z:1//重叠 越大越靠近用户
    }

//***********************************************************    *
    Column//列
    {
        x:700
        y:300
        spacing:20//间隙
        Text//文本默认坐标0,0
        {
            id: q
            width:20
            color:"green"
            text: qsTr("你想说什么")
            elide:Text.ElideLeft//缩略模式靠左 居中等一行显示不了显示****
            font.pointSize:24//字体大小
            z:4
        }
        Text//文本默认坐标0,0
        {
            id: q1
            width:20
            text: qsTr("我爱你吗")
            z:4
        }
        Text//文本默认坐标0,0
        {
            id: q2
            width:20
            text: qsTr("我不接受")
            z:4
        }
        TextEdit//文本编辑器
        {
            width: 200
            text: "<b>hell qml</b> ni"
        }
        TextInput//文本输入框
        {
            width:200
        }
    }

}
//键盘事件
Rectangle
{
    width: 100
    height: 100

    focus:true//是否获取焦点
    Keys.onPressed: //键盘事件的槽函数
    {
        if(event.key==Qt.Key_Q)
        {
            onsole.log("Q被按下了") //后面加一个参数传进来的
            event.accepted=true //事件接受 不再将这个事件传递到父组件
        }
    }
}

//导航键
Grid//格线布局
{
    Rectangle
    {
        id:upL
        width:50;height:50
        color:focus?"yellow":"#668123"//是否获取了焦点
        focus:true//焦点
        KeyNavigation.right: upM//导航键焦点忘右
        KeyNavigation.down: midL//导航键焦点往下

    }
    Rectangle
    {
        id:upM
        width:50;height:50
        color:focus?"yellow":"#ffecae"//是否获取了焦点

        KeyNavigation.right: upR//导航键忘右
        KeyNavigation.down: midM//导航键往下
        KeyNavigation.left: upL//导航键往左
    }
    Rectangle
    {
        id:upR
        width:50;height:50
        color:focus?"yellow":"#32cd32"//是否获取了焦点

        KeyNavigation.left: upM//导航键左
        KeyNavigation.down: midR//导航键往下

    }
//*******************************************************    
    Timer//定时器
    {
        Item {
              Timer 
              {
                  interval: 500
                  running: true
                  repeat: true
                  onTriggered: time.text = Date().toString()
              }
        
              Text { id: time }
          }
    }
    
//*********************************************************    
    Loader//动态加载组件
    {
        Item {
             width: 200; height: 200
       
             Loader { id: pageLoader }
       
             MouseArea 
             {
                 anchors.fill: parent
                 onClicked: pageLoader.source = "Page1.qml"
             }
         }
    }




}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QML编程 基础 小白 的相关文章

随机推荐

  • 录音新手必备,2款音频录制软件推荐!

    有好用的音频录制软件推荐吗 最近需要录制歌曲去参加一个线上的歌手大赛 只需要上传自己录制的音乐就可以了 但是录音软件的质量太差了 就想问问有没有好用的音频录制软件 谢谢 随着数字化时代的到来 录音软件已经不再是专业录音室的专属 越来越多的人
  • 2022.09.01 最新配置maven阿里云仓库配置

    阿里云最新的中央仓库地址及具体配置 之前的配置不能用了 在这里做下笔记留备份 在maven的settings xml文件中配置 idea默认c users 你的用户 m2 settings xml 1 3 完成的setings xml配置如
  • valgrind简介以及在ARM上交叉编译运行【转】

    转自 https blog csdn net dengcanjun6 article details 54958359 版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net dengcanjun6 ar
  • GCC详解-gcc之-Wl选项

    1 介绍 Wl后面的东西是作为参数传递给链接器ld的 比如 gcc Wl aaa bbb ccc 最后会被解释为 ld aaa bbb ccc 2 Wl Map xxx txt 生成map文件 如下会生成map文件mymap txt gcc
  • 算法笔记——差分数组

    差分数组 概念 所谓差分数组就是对数组的相邻元素求差保存到一个新的数组中 这个数组就是差分数组 如下所示 序号 0 1 2 3 4 原数组a 1 5 3 4 3 差分数组d 1 4 2 1 1 作用 用于频繁的区间修改 区间修改是对数组的一
  • 618技术揭秘 - 大促弹窗搭投实践

    背景 618 大促来了 对于业务团队来说 最重要的事情莫过于各种大促营销 如会场 直播带货 频道内营销等等 而弹窗作为一个极其重要的强触达营销工具 通常用来渲染大促氛围 引流主会场 以及通过频道活动来提升频道复访等 因此 如果能将运营的策略
  • SQL N+1问题

    什么是N 1问题 在两个表存在一对一 一对多 多对一 多对多等关联信息时 查询一条数据会衍生N条查询的情况就是N 1问题 比如两个实体类A B A与B数一对多 B与A是多对一 在查询A时 会执行的语句如下 1 从A表查找符合要求的属性 此时
  • notepad 使用方法

    1 notepad 替换以特殊字符开头的行 替换每行 之前的所有字符 包括字符 删除包含特定字符 的行 r n
  • TDD三定律

    定律一 在编写不能通过的单元测试前 不可编写生产代码 定律二 只可编写刚好无法通过的单元测试 不能编译也算不过 定律三 只可编写刚好足以通过当前失败测试的生产代码 测试代码的要素 可读性 可读性 可读性 重要事说三遍 编写测试用例的模式 或
  • 竞赛 基于大数据的社交平台数据爬虫舆情分析可视化系统

    文章目录 0 前言 1 课题背景 2 实现效果 实现功能 可视化统计 web模块界面展示 3 LDA模型 4 情感分析方法 预处理 特征提取 特征选择 分类器选择 实验 5 部分核心代码 6 最后 0 前言 优质竞赛项目系列 今天要分享的是
  • HCIP-IERS 部署企业级路由交换网络 - IS-IS 协议原理与配置

    目录 IS IS 协议原理与配置 ISIS 知识点 前言 场景应用 历史起源 路由计算过程 地址结构 路由器分类 邻居HELLO报文 邻居关系建立 DIS及DIS与DR的类比 链路状态信息的载体 链路状态信息的交互 路由算法 网络分层路由域
  • PTA程序设计类实验辅助教学平台-基础编程题--JAVA--7.10 计算工资

    import java util Scanner public class Main public static void main String args Scanner sc new Scanner System in
  • 【深度学习案例】手写数字项目实现-2.Python模型训练

    深度学习入门教程 手写数字项目实现 2 Python模型训练 4 Python基于Pytorch框架实现模型训练 4 1 训练环境 4 2 定义数据加载器 4 3 定义网络 net py 4 4 定义训练器 trainer py 4 5 模
  • 网络安全——Web目录扫描

    一 Web目录扫描原因 1 发现网站后台管理登录页面 可以尝试发现漏洞 进行爆破 2 寻找未授权页面 有些网站在开发时有一些没有授权的页面 在上线后没有及时清除 可以利用这个弱点进行入侵 3 寻找网站更多隐藏信息 二 Web目录扫描方法 1
  • spring事务-编程式事务控制-代码中控制

    1 启动类加注解 EnableTransactionManagement 如果使用声明式注解 Transactional 则不需要加 2 导致事务回滚只有两种情况 事务内代码抛出异常 transactionStatus setRollbac
  • 【正点原子STM32连载】 第四十五章 FLASH模拟EEPROM实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

    第四十五章 FLASH模拟EEPROM实验 STM32本身没有自带EEPROM 但是STM32具有IAP 在应用编程 功能 所以我们可以把它的FLASH当成EEPROM来使用 本章 我们将利用STM32内部的FLASH来实现第三十六章实验类
  • cors跨域和ajax跨域,jQuery ajax和跨域(CORS)和基本身份验证

    我在建议的可能重复的问题中尝试了答案 但他们没有改变结果 jQuery ajax和跨域 CORS 和基本身份验证 我一直在尝试从本地PC上的客户端 测试Chrome和IE 通过ajax POST到远程服务器的API 但没有成功 Ajax返回
  • SQL 计算留存率以7日内留存率为例

    SQL 计算留存率 留存率 目标日中初始日的用户数 初始日的用户数 现已计算7日留存率为例进行SQL代码逻辑梳理 表名 Table 字段 user id log date as date select t1 date t2 gap t2 r
  • Spring Boot 中的 @RefreshScope 注解:原理和使用

    Spring Boot 中的 RefreshScope 注解 原理和使用 什么是 RefreshScope 注解 在微服务架构中 配置管理是一个重要的问题 通常 配置是在应用程序启动时加载并缓存起来的 但是 在某些情况下 需要动态地修改配置
  • QML编程 基础 小白

    QT quick 添加quick模块 QQuickView 视图 用来链接QML和程序 QQuickView viewer Quick视图 viewer setSource QUrl QLatin1String qrc qml qmlvid