【Qt Quick】零基础入门系列之QML语法(二)

2023-10-30

【Qt Quick】QML语法

|本文大概阅读时间6分钟。
|版权说明:原创文章,如需转载,请标明文章出处。https://blog.csdn.net/weixin_40192195/article/details/109093723


一.前言

QML作为Qt Quick的开发语言,简单易学,本文案例部分来源于Qt官方文档,只做小的修改,增加部分注释。

1.基本元素

注释:// 单行注释,/**/多行注释

import 导入模块语句

import QtQuick 2.5

Item: 元素的类型声明块,基础元素对象,所有元素继承于它,相当于容器

Rectangle:矩形元素对象

    Rectangle{
        width: 100
        height: 100
        x:100
        y:100
        border.color: "black"
        border.width: 5
        radius: 5
        color: "red"
        gradient: Gradient{
            GradientStop{position: 0.0;color: "lightsteelblue"}
            GradientStop{position: 1.0;color: "blue"}
        }
    }

在这里插入图片描述
Text:文本元素

    Text {
        font.family: "Ubuntu"
        font.pixelSize: 20
        color: "red"
        text: "Text"
    }

在这里插入图片描述
Image:图像元素

	Image {
        width: 130
        height: 230 //图像尺寸重新定义
        source: "images/soccer_ball.png" //图片源文件
        fillMode: Image.PreserveAspectFit //显示合适尺寸的大小
    }

在这里插入图片描述
MouseArea:鼠标区域

	Rectangle {
          width: 100; height: 100
          color: "green"

          MouseArea {
              anchors.fill: parent
              acceptedButtons: Qt.LeftButton | Qt.RightButton
              onClicked: {
                  if (mouse.button == Qt.RightButton) //右键蓝色
                      parent.color = 'blue';
                  else
                      parent.color = 'red'; //左键红色
              }
          }
      }

在这里插入图片描述

	Rectangle {
          id: container
          width: 600; height: 200

          Rectangle {
              id: rect
              width: 50; height: 50
              color: "red"
              opacity: (600.0 - rect.x) / 600 //随着拖拽,透明度发生变化

              MouseArea {
                  anchors.fill: parent
                  drag.target: rect
                  drag.axis: Drag.XAxis //延x轴拖拽
                  drag.minimumX: 0
                  drag.maximumX: container.width - rect.width //定义最大的拖拽长度
              }
          }
      }

在这里插入图片描述

2.基本属性

不同元素的都有自己特定的属性,本文只讲述共有的可视化属性。

id:root 元素的属性,不同的元素拥有不同的属性

Geometry(几何属性)

width: height: 元素所占窗口的宽高
x: y: 元素左上角的x轴和y轴坐标

Transformation(翻转)

scale 缩放,通过比例进行(0-1)
rotation 旋转,通过角度进行(0-360)

	Rectangle{
        id:rect1
        width: 100
        height: 100
        x:100
        y:100
        border.color: "black"
        border.width: 5
        radius: 5
        color: "red"
        gradient: Gradient{
            GradientStop{position: 0.0;color: "lightsteelblue"}
            GradientStop{position: 1.0;color: "blue"}
        }
        MouseArea{
            anchors.fill: parent
            onClicked: {
                rect1.scale -= 0.1 //设置缩放比例
                rect1.rotation += 20 //设置旋转角度
            }
        }
    }

在这里插入图片描述

Layout handing(布局操作)

anchors 锚定,锚定其他元素的位置
top、bottom、left、right 上下左右
verticalcenter、horizontalcenter 水平和垂直居中

    Item {
        Rectangle {
            id: pic
            width: 100
            height: 100
            color: "red"
        }
        Text {
            id: label
            anchors.horizontalCenter: pic.horizontalCenter //中心垂直
            anchors.top: pic.bottom //文本的顶部是矩形的底部
            anchors.topMargin: 5 //顶部间距 5
            text: "Lable"
        }
    }

在这里插入图片描述

        Rectangle {
            id: pic
            width: 100
            height: 100
            color: "red"
        }
        Text {
            id: label
            anchors.verticalCenter: pic.verticalCenter //水平中心对齐
            anchors.left: pic.right //文本的顶左边是矩形的右边
            anchors.leftMargin: 5 //左边间距 5
            text: "Lable"
        }

在这里插入图片描述

Key handing(按键操作)

key、keyNavigation 按键定位属性进行focus焦点操作

		focus: true
        Keys.onLeftPressed: rect1.x -= 5 //rect1为rectangle的id
        Keys.onRightPressed: rect1.x += 5 //按右键向右移动

在这里插入图片描述

Visual(可视化)

clip 裁剪,元素边界的绘制
opacity 控制透明度,拖拽部分已讲述
visible 控制元素的显示

        Rectangle {
            id: pic
            width: 100
            height: 100
            color: "red"
            MouseArea{
                anchors.fill: parent
                onClicked: {
                    pic2.visible = !pic2.visible //鼠标点击第一个图,第二图消失
                }
            }
        }
        Rectangle {
            id: pic2
            width: 100
            height: 100
            color: "blue"
            anchors.horizontalCenter: pic.horizontalCenter //中心垂直
            anchors.top: pic.bottom //文本的顶部是矩形的底部
            anchors.topMargin: 5 //顶部间距 5

            MouseArea{
                anchors.fill: parent
                onClicked: {
                    pic.opacity -= 0.2 //鼠标点击第二个图,第一图透明度增加
                }
            }
        }

在这里插入图片描述

State definition(状态定义)

states 当前元素的状态列表

    Rectangle {
          id: root
          width: 100; height: 100

          state: "red_color"
          states: [
              State {
                  name: "red_color"
                  PropertyChanges { target: root; color: "red" }
              },
              State {
                  name: "blue_color"
                  PropertyChanges { target: root; color: "blue" }
              }
          ]

          MouseArea{
              anchors.fill: parent
              onClicked: { //点击后根据状态进行改变颜色
                  parent.state=(parent.state=="red_color"?"blue_color":"red_color")
              }
          }
      }

在这里插入图片描述


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

【Qt Quick】零基础入门系列之QML语法(二) 的相关文章

  • QML - MouseArea/MouseEvent 问题

    下面的代码生成一个白色矩形 其中包含一个红色矩形和一个灰色矩形 每个矩形都有一个关联的 MouseArea 当鼠标在灰色矩形内单击时 灰色矩形会变成蓝色 当鼠标光标进入红色矩形内部时 红色矩形会打印一条控制台消息 当发出释放信号时 会打印另
  • 如何在 QML 中重用代码

    我有这段 QML 代码 Column spacing units gu 2 anchors fill parent centerIn parent Row spacing units gu 4 Row spacing units gu 4
  • 在 Qt Quick 中从 ListView 制作自定义 TableView 的规范方法

    制作桌子的最佳方法是什么ListView 假设给定一个二维字符串数组并且delegate因为所有列都是Labels 仅使用 QML 时如何以及何时计算每列的最大项目宽度 各内容Label不是恒定的 即implicitWidth在生命周期中是
  • 为 QML TreeView 创建模型

    我正在尝试使用 QML TreeView 模型 Qt 的示例不包括如何创建模型 我读了这个post https stackoverflow com questions 40433038 qml treeview not updating a
  • 使用 QQuickImageProvider 的正确方法是什么?

    我需要动态选择 qpixmaps 以显示在 QML 图像项中 该 qpixmaps 应该从源 qpixmap 中裁剪出来 我将从 QML 文件中设置它 我希望它们能够根据 QML 的第一个需求被 C 代码裁剪并缓存以供将来使用 对于动态图像
  • 如何为动态创建的 QML 元素添加事件处理程序?

    我根据以下内容动态添加了一些 qml 组件到我的 gui 中这篇博文 http kunalmaemo blogspot kr 2011 04 creating qml element dynamically on html 如何为这些新创建
  • Qt/Qml:如何包含地图图块以供离线使用?

    我需要将离线图块 滑动地图 包含到主要在 Android 和 iOS 上运行的 Qt Qml 移动应用程序中 我发现的唯一有据可查且有效的解决方案是商业 Esri Arcgis Runtime for Qt 但是 创建切片包需要使用 Arc
  • 在 QML 中获取 $HOME 和/或用户名

    我需要知道如何获取用户的用户名和 或主目录 我用 google 搜索了一段时间 但只能找到 C 或 BASH 的变量 如何获取用户名或主目录 我正在用 QML 写作 这就是我的实现方式 Qml环境变量 h ifndef QMLENVIRON
  • 如何更改菜单栏的字体颜色?

    如何更改 QML 菜单项的文本颜色MenuBar import QtQuick 2 4 import QtQuick Controls 1 3 import QtQuick Window 2 2 import QtQuick Dialogs
  • Qt3D动态纹理

    我正在开发包含 Qt3D 视图的软件 这个 3D 视图使我们能够可视化元素 对象的所有渲染部分都是使用自定义材质 着色器在 QML 中完成的 我能够创建一种将纹理传递到着色器以进行纹理化的材质 保存纹理的QML对象是Texture2D 它的
  • 如何向 QFileSystemModel 添加自定义角色

    我想向 QFileSystemModel 添加自定义角色 可能是派生模型 我想使用此角色来保存复选框的选中状态 该状态显示在自定义委托中的文件名旁边 如何才能做到这一点 我已经使用过使用示例Qt Quick Controls 文件系统浏览器
  • QML 不显示 svg 图像

    我编写了一个简单的 QML ui 它使用一些 svg 图像 当我在桌面上执行该应用程序时 一切都很好 显示了 UI 以及上面的 svg 图像 当我尝试在嵌入式设备 运行嵌入式 Windows 上执行应用程序时 会出现问题 在这种情况下 会显
  • Qml中的QScrollArea:Flickable + QQuickPaintedItem

    我正在尝试实现类似的东西QScrollArea 在小部件世界中 在 Qml 的帮助下 我决定一探究竟Flickable plus QQuickPaintedItem基于项目 在我的例子中名为抽屉 Flickable onContentXCh
  • 如何在 QML 中使用 Font Awesome

    有谁知道如何在 QML 中使用 Font Awesome 吗 我找不到任何文档或任何信息如何在 QML 中使用 Font Awesome 我喜欢做的是使用fontello http fontello com 创建最小的图标集 而不是从 Fo
  • 将项目添加到自定义组件的布局

    我有一个习惯Footer Component我想在 QML 应用程序的不同位置重用它 Rectangle color gold height 50 anchors bottom parent bottom left parent left
  • 通过对 XmlHttpRequest (REST) 的响应在 QML 中显示图像

    我需要从 REST API 调用中获取 jpeg 图像 我使用 XMLHttpRequest 因为请求需要身份验证标头 即我不能只创建一个图像并将源设置为带有 user passwd url 的 URL 我认为我可以通过将 REST 数据设
  • 如何在 C++ 和 QML 应用程序中使用 qrc?

    我在 Windows7 上用 c qnd Qt Creator QML 编写了 Qt Quick Desktop 应用程序 现在 我必须部署它 并且我需要隐藏 qml 文件和图像 意味着 将它们放入资源等中 我读到有一个很好的方法可以使用
  • 禁用 QML Slider 的鼠标滚轮

    我希望能够滚动Flickable使用鼠标滚轮 或触摸板上的两根手指 不改变Sliders它可能包含 示例代码及结果应用 import QtQuick 2 7 import QtQuick Window 2 2 import QtQuick
  • Qml 模块未找到 CPP 类注册与新的 QML_ELEMENT r

    我尝试使用 Qt5 15 0 和新宏 QML ELEMENT 在 QML 中注册我的自定义 CPP 类 但找不到该模块 Qt Creater 帮助文件描述了 QML ELEMENT 的步骤 我也检查了 Qt 手册 但没有幸福的结局 http
  • 内容居中的流式布局

    我有一排项目 当窗口宽度变得太小而无法显示一行中的所有项目时 这些项目应该堆叠起来 如下图所示 The Flow组件堆叠项目 但它们不是居中而是在左侧或右侧对齐 Flow Item Item Item Item Item QML 中是否有内

随机推荐

  • 深入理解Python中的GIL(全局解释器锁)

    深入理解Python中的GIL 全局解释器锁 一 GIL是什么 GIL 又称全局解释器锁 作用就是限制多线程同时执行 保证同一时间内只有一个线程在执行 线程非独立的 所以同一进程里线程是数据共享 当各个线程访问数据资源时会出现 竞争 状态
  • AWK用户自定义函数

    函数是程序的基本组成部分 AWK允许我们定义自己的函数 一个大项目可以分为多个函数并且每个函数可以写 独立测试 它提供了可重用性的代码 下面给出的是用户自定义函数的一般格式为 function function name argument1
  • Android开发中onConfigurationChanged()不起作用

    很多开发者 在开发中很可能遇到的这样的问题 在Activity中重写了onConfigurationChanged 但是该函数就是不执行 这种问题的解决方式一般是没有在AndroidManifest中添加configuration的标签 可
  • 【模型评估】ROC(Receiver operating characteristic)与 AUC

    前面 我们提到了混淆矩阵 以及根据混淆矩阵进一步计算得到的敏感度 召回率 特异度 精确度 准确度 F1 Score等等 那他们的前提都是要首先确定一个截断阈值 模型评估 混淆矩阵 confusion matrix 之 TP FP TN FN
  • 操作系统引论和进程管理部分习题

    一 单选题 1 操作系统是一种 A 通用软件 B 系统软件 C 应用软件 D 软件包 正确答案 B 2 操作系统的 管理部分负责对进程进行调度 A 主存储器 B 控制器 C 运算器 D 处理机 正确答案 D 3 若把操作系统看作计算机系统资
  • Python高级用法总结—(列表推导式,迭代器,生成器,装饰器)

    原文地址 Python高级用法总结 列表推导式 迭代器 生成器 装饰器 Python高级用法总结 列表推导式 迭代器 生成器 装饰器 列表推导式 list comprehensions 场景1 将一个三维列表中所有一维数据为a的元素合并 组
  • Nature:为什么人工智能需要理解因果?

    转自 集智俱乐部 作者 Neil Savage 导语 为什么药物只对某些人有效 而对另一些人无效 为什么 ChatGPT 会产生违背常识的答案 机器学习的发展似乎遇到了障碍 其中症结或许在于 相关性不等于因果性 近日发表在 Nature 的
  • 简单理解HTTPS

    HTTP 全名为 HyperText Transfer Protocol 也就是 超文本传输协议 是一种用于分布式 协作式和超媒体信息系统的应用层协议 简单来说就是一种发布和接收 HTML 页面的方法 被用于在 Web 浏览器和网站服务器之
  • 点亮三盏灯

    驱动文件 include
  • c++函数返回引用,并赋值给引用对象

    函数返回引用时 返回值不需要另外申请临时对象 直接返回引用本身 大大节省了程序执行效率 但是函数返回引用后 直接赋值给引用对象和非引用对象也是很重要的一点 直接看下面例子 include
  • 谈谈对Spring IOC的理解

    学习过Spring框架的人一定都会听过Spring的IoC 控制反转 DI 依赖注入 这两个概念 对于初学Spring的人来说 总觉得IoC DI这两个概念是模糊不清的 是很难理解的 今天和大家分享网上的一些技术大牛们对Spring框架的I
  • OpenCV知识点

    OpenCV基础知识点 C OpenCV环境配置 每个项目需要单独配置 添加包含目录 点击VC 目录 gt 点击包含目录 gt 点击右边向下的小箭头 gt 点击 lt 编辑 gt 文件路径为 D software OpenCV opencv
  • Quartus分配管脚(Pin)简要教程

    Quartus分配管脚 Pin 1 在打开项目 点击选项Assignments gt Pin Planner 入下图所示 2 根据板子DataSheet给的管脚分配信息 给各输出输入的location选择pin 2 1例如我需要给时钟信号分
  • [玩转AIGC]sentencepiece训练一个Tokenizer(标记器)

    目录 一 前言 二 安装 三 自己训练一个tokenizer 四 模型运行 五 拓展 六 补充 一 前言 前面我们介绍了一种字符编码方式 如何训练一个中英翻译模型 LSTM机器翻译seq2seq字符编码 一 这种方式是对一个一个字符编码 丢
  • dynamics crm optionset 类型字段存放实体StringMapBase

    注意 这些字段的查询方式都是在实体表 StringMap 查询方式 select from StringMapbase where AttributeName new legalentity and LangId 2052 and Obje
  • 编译libcurl+zlib+openssl

    前言 使用C 发送http请求 非libcurl莫属 加上openssl支持https 加上zlib支持gzip自动解压 完美 记录一下编译过程以及遇到的问题 准备 1 zlib下载地址 http www zlib net 我下载的是zli
  • leetcode--62不同路径和64.最小路径和(C语言)

    1 62 不同路径 2 两种解法 1 递归法 代码简洁 效率不高 可以画出一棵树 叶子节点个数对应路径个数 void path int m int n int p if m 0 n 0 p if m gt 0 path m 1 n p if
  • 以太坊 链私有链环境搭建(windows) 2018.4.11

    这篇博客写的比较久了 最近发现以太坊的版本有了更新 部署时有些细微的差别 所以在此更新一下 希望做大家有所帮助 有个小白的问题 不知道为什么 编辑的时候代码都是英文标点 发布之后变成了中文 所以大家在使用的时候 注意一下 在阅读本文之前 希
  • 【python基础知识】11.如何debug -常见报错原因及排查思路 - 思维篇

    常见报错原因及排查思路 前言 Bug Debug 一起动手来Debug bug 1 粗心 bug 2 知识不熟练 bug 3 思路不清 print 号注释 练习题1 小结 练习题2 bug 4 被动掉坑 try except 语句 总结 前
  • 【Qt Quick】零基础入门系列之QML语法(二)

    Qt Quick QML语法 本文大概阅读时间6分钟 版权说明 原创文章 如需转载 请标明文章出处 https blog csdn net weixin 40192195 article details 109093723 目录 Qt Qu