QML入门----基本语法(二)

2023-05-16

文章目录

        • 基础语法
          • 1.import 导入语句
          • 2.Loader
        • 一、类型
        • 二、对象
          • 1.id
          • 2.属性(property)
          • 3.信号和信号处理器特性
          • 4.方法特性 function
          • 5.附加属性和附加信号处理器
          • 6.枚举
        • 四、注释
        • 五、锚布局(anchors)
        • 六、交互
        • 七、调试输出

基础语法

1.import 导入语句
//可以加入限定符,只在限定符作用域使用
import QtQuick 2.9 as CoreItems
import "../textwidgets" as MyModule

//只能包含一个根对象
CoreItems.Rectangle {
	width: 100; height: 100
	MyModule.Text {text: "hello"}
}
2.Loader

可以动态加载QML,可以看做是一种占位符,主要用于延迟组件的创建。
它是一个焦点作用域,要使任何子项目获得活动焦点,则必须将Loader的focus属性设置为true,任何被加载的项目获得的键盘事件都需要设置accepted为true,从而使他们不会传播到父项目中和Loader中。

一、类型

  • 基本类型
  • QML 对象类型
    Window 和 Text 都是对象类型。

1.Item:是所有可视化类型的基类型,叫做根对象或者根项目。常用于对项目进行分组。其有一个堆叠属性z,默认值为0,值越大,就是在最上面绘制。如果子对象z属性是负数,则会绘制在父对象的下面。
2.Component对象类型,内部只能包含一个根对象,根对象也不会直接显示,在需要时才会加载,这个类型一般用于为视图提供图形组件

  • JavaScript 类型

二、对象

当对象类型被实例化以后,就被叫做该对象类型的对象,总而言之,对象类型后面添加 {} 后就被称为对象。对象包含好多个特性,如id、属性、信号、信号处理器、方法、附加属性和附加信号处理器、子对象

1.id

一个对象一般都会在开始的时候,指定一个id的值,这个id值在其他对象中识别并引用该对象,id 值必须使用小写字母或者下划线开头,并且不能使用字母、数字和下划线以外的字符,其值在一个组件的作用域中必须是唯一的。

id 看起来像是一个属性,但 id 并不是一个属性。例如上文代码中Text 对象的 id 为 name,所以可以在其他对象中通过 name.text 来获取 Text 对象中的 text 属性的值, 但无法通过name.id 来获取 id 的值。

2.属性(property)

属性是对象的特性之一,可以是一个静态值或者是一个动态表达式。可以自定义属性

property int someNumber
//var也可以当做属性类型,是一种通用的占用符,可以包含任意类型的值
property var someNumber: 1.5
property var someBool: true
property var someList: [1, 2, "three"]
//对象类型也可以作为属性类型
property Rectangle someRectangle
//只读属性,必须初始化,不允许为默认属性,不允许有别名
readonly property var someNumber: 1.5

//对象列表属性
//只声明,不初始化
property list <Rectangle> myRect
//声明并初始化
property list <Rectangle> myRect: [
	Rectangle { color: "red"},
	Rectangle { color: "blue"},
]

//属性别名,可以与现有属性同名,但是会被覆盖
//作用:子对象设置属性别名后,组件使用者可以在外部使用,从而解决了子对象的封装问题,又将有用的属性暴露出来。
property alias color: otherObject.color
color: "red"
3.信号和信号处理器特性
  • 信号定义:
    //小括号可以省略
    signal hovered()
    signal actionPer(string action, var actionResult)
  • 信号处理器
    对应信号发射时,信号处理器会被QML引擎自动调用
4.方法特性 function
Rectangle {
    id: rect
    function calculateHeight() {
        console.log("进入函数")
        return rect.width / 2
    }
    width: 200; height: calculateHeight()
}
5.附加属性和附加信号处理器

附加属性,例如ListView类型包含一个附加属性ListView.isCurrentItem,可以附加到ListView的每一个委托对象。

ListView {
    model: 3;
    delegate: Rectangle {
        id: delegateItem
        width: 100; height: 100
        color: ListView.isCurrentItem ? "red" : "yellow"

        Rectangle {
            id: rect
            width: 100; height: 100
            //附加属性只是附加到了根委托对象,而不使委托对象的子对象,所以可以用根委托对象去访问
            //color: ListView.isCurrentItem ? "red" : "yellow"   错误
            color: delegateItem.ListView.isCurrentItem ? "red" : "yellow" //正确
        }
    }
}

附加信号处理器,例如,Component,用于在组件创建完成时,执行一些JS代码

Component.onCompleted: {
	console.log("构建完成")
}
6.枚举
//Move.qml
Text {
    enum TextType {
        Normal,
        Heading
    }
    property int textType: Move.TextType.Heading
}

四、注释

  • 单行注释
    “ // ” 开始
  • 多行注释
    /*开始,以 */ 结尾

五、锚布局(anchors)

这是qml中布局的一种方法,可以在一个部件的上、下、左、右、水平居中、垂直居中、中心等位置进行锚定。

  • Column
  • Row
  • Grid
  • Flow

六、交互

可以通过MouseArea,表明需要监视对象的范围,在通过onClicked:{} 来执行想要进行的操作。

七、调试输出

将需要的信息输出到控制台。注意需要将console写在函数里面或者信号处理器里面。
console.log、console.debug、console.info、console.warn、console.error

  • 参考代码
Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    Text {
        id: name
        text: qsTr("你好 世界!")
        anchors.centerIn: parent

        Rectangle {
            id: colorRect
            width: 20 * 2
            height: width
            radius: 20
            color: "green"
			
			//在name对象的右边
            anchors.left: name.right
            //绿色圆形左侧的边距为10
            anchors.leftMargin: 10
            //name对象的垂直中心
            anchors.verticalCenter: name.verticalCenter

            MouseArea {
                //MouseArea填充整个父对象(绿色圆形)
                anchors.fill: parent
                onClicked: {
                    //绿色圆形点击后,输出控制台
                    console.debug("colorRect: ", parent.color)
                }
            }
        }
    }
}

在这里插入图片描述

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

QML入门----基本语法(二) 的相关文章

  • 为什么Ubuntu终端输入su会报错鉴定失败?

    Ubuntu刚刚安装上 xff0c 要输入一堆类似sudo apt install xxxxxx的命令进行装各种必须的软件 xff0c 老是打sudo很烦 xff0c 就su一下 xff0c 然后就能省略掉sudo xff0c 直接apt
  • python-gitlab API基本操作以及(下载指定文件或文件夹)

    一 使用python对gitlab进行自动化操作 1 python gitlab模块官网文档 2 gitlab官网文档 二 常用使用功能 span class token comment 1 登录gitlab span def span c
  • python 完美压缩文件夹为zip格式

    一 压缩 1 备注 xff08 1 xff09 os walk xff0c 会返回一个三元组 path xff1a 文件夹本身的地址 xff1b dirNames xff1a 该文件夹中所有目录的名字列表 xff1b fileNames x
  • 模拟执行网页接口

    一 背景 我想使用程序自动执行提交软件操作 xff0c 这时候需要通过谷歌浏览器去查看需要使用哪些请求字段等 二 实现方式 1 先在浏览器上输入账号 密码进行登录 2 打开开发者工具 3 设置浏览目录 4 然后输入相关参数 xff0c 手动
  • Python resquests使用multipart/form-data格式上传参数或文件

    参考 xff1a 井蛙不可语于海 一 需要注意的坑 在resquests中不用加上Content Type xff0c 否则请求无法成功 xff0c 它会有一个默认值 二 代码示例 span class token keyword try
  • QT Expression:_BLOCK_TYPE_IS_VALID断言错误

    一 最近使用QT xff0c 写了一个小小的Demo xff0c 在关闭窗口时总是报错 二 原因 1 Qt初始化时有两种构造方式 xff1a span class token comment xff08 1 xff09 将窗口对象定义在栈上
  • QT 解压tar.gz格式的压缩包

    一 tar gz 以 tar gz为后缀的文件是一种压缩文件 xff0c 在Linux下常见 一般情况下都是源代码的安装包 它其实是先打包成tar格式的文件 xff0c 然后利用gzip压缩技术来压缩 这两天我想在windows下去解压这种
  • QT error C2220: 警告被视为错误 - 没有生成“object”文件

    一 错误代码图 下面的代码会造成这个问题 span class token keyword void span CustomWindow span class token operator span span class token fun
  • QT 复制、粘贴系统剪贴板

    一 复制 可以复制文字 图片到系统剪贴板 xff0c 图片最好将QImage格式复制到剪贴板 xff0c QPixmap要比QImage慢 xff0c 因为QPixmap需要首先转换为QImage格式 QClipboard span cla
  • QT 最常用字符串操作

    文章目录 96 96 QString 96 96 一 查找字符串位置二 截取指定位置的字符串三 判断字符串是否含有空字符四 判断字符串是否为空值五 指定位置插入字符串六 判断是否以某个字符串开始或结尾七 删除空字符八 排序字符串九 切割字符
  • QT 计算字符串、文件md5值

    一 计算字符串md5值 xff08 1 xff09 QCryptographicHash xff0c 提供一种生成加密散列的方法 xff0c Hash叫作散列表 xff0c 也叫作哈希 xff08 2 xff09 当前支持MD4 MD5 S
  • Ubuntu系统装上了以后应该干什么?

    我列出一个Linux Ubuntu装机单 xff1a 可以直接在桌面上新建文本文档 xff0c 复制粘贴我的装机命令单 xff0c 然后文本文档后缀改成sh xff0c 再在属性里设置 允许以程序执行文件 xff0c 就可以了 装机单 xf
  • QT 创建、修改桌面快捷方式,固定任务栏快捷方式

    一 获取系统文件路径 我们用到DesktopLocation和AppDataLocation 二 创建与修改快捷方式路径 修改可以直接将创建的快捷方式覆盖到指定的路径中即可 xff08 1 xff09 桌面快捷方式 QString desk
  • QT UTF-8转GBK编码

    在Qt5中使用Unicode来存储 操作字符串 xff0c windows下是GBK编码 UTF 8 转 GBK QString appLink span class token operator 61 span span class to
  • QT 删除一周前的日志

    1 现象 本地客户端log越来越大 xff0c 写入速度也会变慢 xff0c 所以在启动时进行清理 2 日志文件名 3 代码 span class token keyword void span span class token funct
  • Python脚本转换为exe程序

    一 安装pyinstaller pip install pyinstaller 二 打包程序 xff08 pyinstaller exe在python下的 Scripts 文件夹下 xff09 python pyinstaller exe
  • QT 计算文件夹总大小并转换为B、KB、M、G

    一 计算文件夹总大小 qint64 span class token function fileSize span span class token punctuation span span class token keyword con
  • QT 自定义滑动条(上方有实时方框显示数值,且带有刻度值)

    文章目录 一 效果图二 原理三 示例代码四 还可以使用系统stylesheet语法来自定义滑动条五 设置小数值 一 效果图 这种滑动条是控件所拼接而成 二 原理 xff08 1 xff09 LectureCorrectBoxSliderFo
  • QT 流式布局水平插入小部件(可自动换行)

    一 类似于这样的效果图 由于对象不确定有多少人 xff0c 所以使用代码 xff0c 在布局中添加部件 xff0c 如果一行撑不下 xff0c 则自动添加到第二行 二 使用FlowLayout FlowLayout是一个自定义布局类 xff
  • QT 计算平均分(向上取整或向下取整)

    一 场景 需要计算四门成绩的平均分 xff0c 并向上取整 span class token keyword double span temp span class token operator 61 span span class tok

随机推荐