Qt Quick系列(4)—定位元素

news2024/11/26 23:50:11

🚀作者:CAccept
🎂专栏:Qt Quick
在这里插入图片描述

文章目录

  • 前言
  • 相对布局
    • 代码示例
      • 示例一
      • 示例二
      • 示例三
      • 示例四
      • 示例五
      • 示例六
  • 简单"布局器"
    • Column
    • Row
    • Grid
    • Flow
  • 结语

前言

在Qt Quick中,可以使用以下方式来定位元素:
1、使用绝对定位:您可以直接指定元素的x和y坐标来将其放置在指定位置。例如:

Rectangle {
    width: 100
    height: 100
    x: 200
    y: 150
}

2、使用相对定位:您可以使用父项的属性或其他元素的属性来相对定位元素。例如,使用anchors属性将元素相对于其父项进行定位:

Rectangle {
    width: 100
    height: 100
    anchors {
        left: parent.left
        top: parent.top
    }
}

3、使用布局器:Qt Quick提供了多种内置布局器,如RowColumnGridFlow等。您可以将元素放置在布局器中,布局器会自动管理元素的位置。例如,使用Row布局器将两个元素水平排列:

Row {
    spacing: 10
    Rectangle {
        width: 100
        height: 100
    }
    Rectangle {
        width: 150
        height: 100
    }
}

4、使用Qt Quick Controls中的布局:如果您使用Qt Quick Controls,可以使用Layouts来定位元素。Qt Quick Controls提供了一组用于构建常见界面布局的布局类型,如ColumnLayoutRowLayoutGridLayout等。

接下来本篇博客将会围绕着2和3进行详细讲解,希望对您能够有所帮助


相对布局

使用父项的属性或其他元素的属性来相对定位元素,对于相对布局来说很有用的一个属性是anchors,接下来将对anchors进行一些说明和举例:
anchors 属性可以应用于任何派生自 Item 类的元素。下面是一些常用的 anchors 属性:

1、anchors.left、anchors.right、anchors.horizontalCenter:用于控制元素的水平位置。例如,anchors.left: parent.left 将元素的左边缘锚定到其父项的左边缘,anchors.horizontalCenter: parent.horizontalCenter 将元素的水平中心与其父项的水平中心对齐。

2、anchors.top、anchors.bottom、anchors.verticalCenter:用于控制元素的垂直位置。例如,anchors.top: parent.top 将元素的顶边缘锚定到其父项的顶边缘,anchors.verticalCenter: parent.verticalCenter 将元素的垂直中心与其父项的垂直中心对齐。

3、anchors.fill:将元素的边缘锚定到其父项的对应边缘,实现元素与父项完全填充的效果。例如,anchors.fill: parent 将元素完全填充其父项。

4、anchors.centerIn:将元素的中心点锚定到另一个元素的中心点。例如,anchors.centerIn: parent 将元素的中心点与其父项的中心点对齐。

5、anchors.margins:用于定义元素与其锚定元素之间的外边距。例如,anchors.margins: 10 将为元素与其锚定元素之间的每个边缘添加 10 个逻辑像素的外边距。


代码示例

先提供两个qml文件用于component调用
GreenSquare.qml

import QtQuick 2.0

Rectangle
{
    width: 100;
    height: 100
    color: "green"
    border.color:Qt.lighter(color)
}

BlueSquare.qml

import QtQuick 2.0

Rectangle
{
    width: 50;
    height: 50
    color: "blue"
    border.color:Qt.lighter(color)
    //将text和label的text进行绑定,外部就可以通过更改text来更改label下的text
    property alias text: label.text
    Text
    {
        id:label
        text:qsTr("text")
        color:"white"
        anchors.centerIn: parent
    }
}


示例一

GreenSquare
{
      BlueSquare
      {
          text:"(1)"
          //四周都进行锚定
          anchors.fill:parent
          //离边框的距离为8个像素
          anchors.margins: 8

      }
}

在这里插入图片描述

示例二

GreenSquare
 {
       BlueSquare
       {
           text:"(2)"
           //left进行锚定
           anchors.left:parent.left
           y:8
           //离边框的距离为8个像素
           anchors.margins: 8
       }
}

在这里插入图片描述

示例三

GreenSquare
{
     BlueSquare
     {
         text:"(3)"
         //用父亲的右边来锚定left
         anchors.left:parent.right

     }
}

在这里插入图片描述

示例四

GreenSquare
{
     BlueSquare
      {
          id:blue1
          text:"(4-1)"
          //top进行锚定
          anchors.top:parent.top
		 //水平Center进行锚定
          anchors.horizontalCenter: parent.horizontalCenter
          //离边框的距离为8个像素
          anchors.margins: 8
          height:25
      }
      BlueSquare
        {
            id:blue2
            text:"(4-2)"
            width:75
            //将top与blue1的bottom进行锚定
            anchors.top: blue1.bottom
            anchors.horizontalCenter: parent.horizontalCenter
            //离边框的距离为8个像素
            anchors.margins: 8
            height:25
        }
 }

在这里插入图片描述

示例五

GreenSquare
{
     BlueSquare
     {
          text:"(5)"
          //中心进行锚定
          anchors.centerIn: parent
      }
 }

在这里插入图片描述

示例六

GreenSquare
{
      BlueSquare
        {
            text:"(6)"
            //依据parent对horizontalCenter进行锚定
            anchors.horizontalCenter: parent.horizontalCenter
            //向左偏移12个像素
            anchors.horizontalCenterOffset: -12
            //垂直进行锚定
            anchors.verticalCenter: parent.verticalCenter
        }
 }

在这里插入图片描述


简单"布局器"

可以将Row、Column、Grid和Flow看作是一些简单的布局器。它们提供了一种简单的方式来排列和定位子项,但功能相对有限。这些简单的布局器(Row、Column、Grid和Flow)适用于一些基本的布局需求,如水平排列、垂直排列、网格排列以及流式排列。它们是Qt Quick中的常见用法,可以方便地创建基本的布局结构。
然而,如果您需要更复杂的布局和更多的布局控制选项,您可能需要使用更高级的布局器,如RowLayoutColumnLayout、和GridLayout等。这些布局器提供了更多的属性和选项,可以更精确地控制子项的位置、大小、对齐方式和间距。因此,如果您的布局需求比较简单且不需要高级的布局控制,那么使用Row、Column和Grid等简单的布局器就足够了。但如果您需要更多的布局控制选项,或者需要自定义布局的行为,那么可以考虑使用更高级的布局器。

Column

Column是垂直布局,直接看代码更好理解

Column{
        id:column
        //布局器位于父类的中间
        anchors.centerIn:parent
        //矩形之间的间距是8个像素
        spacing:8
        Rectangle{
            width: 50
            height: 50
            color:"blue"
        }
        Rectangle{
            width: 50
            height: 50
            color:"red"
        }
        Rectangle{
            width: 50
            height: 50
            color:"green"
        }
 }

在这里插入图片描述


Row

Row是水平布局

Row{
        id:column
        anchors.centerIn:parent
        //矩形之间的间距是8个像素
        spacing:8
        Rectangle{
            width: 50
            height: 50
            color:"blue"
        }
        Rectangle{
            width: 50
            height: 50
            color:"red"
        }
        Rectangle{
            width: 50
            height: 50
            color:"green"
        }
}

在这里插入图片描述


Grid

Grid 元素是 Qt Quick 中的一个容器元素,它提供了一种方便的方式来将子项放置在网格中。与 GridLayout 布局器不同,Grid 元素本身并不是布局器,而是一种布局容器,类似于 Row 和 Column 元素。它允许您以网格状方式排列子项,并使用行和列的定义来控制子项的位置。

我们创建了一个 Grid 元素,指定了列数为 3,并设置了子项之间的间距为 10。 然后,我们添加了6个矩形子项。Grid 元素会根据列数自动调整子项的位置,从左到右、从上到下依次填充子项到网格中。

Grid {
        columns: 3
        spacing: 10
        anchors.centerIn: parent
        Rectangle { width: 50; height: 50;color:"blue" }
        Rectangle { width: 50; height: 50;color:"red" }
        Rectangle { width: 50; height: 50;color:"green"}
        Rectangle { width: 50; height: 50;color:"red" }
        Rectangle { width: 50; height: 50;color:"blue"}
        Rectangle { width: 50; height: 50;color:"green"}
}

在这里插入图片描述


Flow

Flow 布局器是一种用于在可用空间内自动流式布局子项的高级布局器。它会根据可用空间的大小和子项的大小自动调整子项的位置和大小,以最大化利用可用空间。

Flow {
       //适应parent大小来调整布局
       anchors.fill: parent
       anchors.margins: 20
       spacing: 20
       Rectangle { width: 50; height: 50;color:"blue" }
       Rectangle { width: 50; height: 50;color:"red" }
       Rectangle { width: 50; height: 50;color:"green"}
       Rectangle { width: 50; height: 50;color:"red" }
       Rectangle { width: 50; height: 50;color:"blue"}
       Rectangle { width: 50; height: 50;color:"green"}
  }

在这里插入图片描述
在这里插入图片描述


结语

在本篇博客中,我们深入探讨了 Qt Quick 中的定位元素技术,包括使用 anchors 属性、布局器和定位器来精确定位和调整元素的位置和大小。我们学习了如何使用 Row、Column 和 Grid 布局器进行简单的布局,以及如何使用 Anchors 定位器进行更灵活的布局。通过示例代码和实际应用场景的介绍,我们展示了定位元素在构建用户界面中的关键作用。

掌握定位元素技术对于 Qt Quick 开发至关重要。通过灵活运用定位元素,我们可以实现各种复杂的用户界面布局,从简单的列表到复杂的仪表盘,都能得心应手。定位元素是创建响应式、可扩展和适应性强的用户界面的关键。

如果您有任何疑问、反馈或者想要分享您在使用定位元素时的经验,请在下方留言。我期待听到您的想法和问题。同时,请继续关注我的博客,我们将在下一篇文章中探讨更多关于 Qt Quick 的主题。谢谢您的阅读和支持!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/587177.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

需要建立强大的网络响应框架

由于头条新闻充斥着网络攻击,因此企业制定网络响应框架变得前所未有的重要。当今的网络安全形势继续快速发展,黑客行动主义、民族国家支持的网络攻击、勒索软件和其他攻击策略变得更加危险、复杂,组织的防御成本也越来越高。随着企业进行数字…

华为OD机试真题B卷 Java 实现【名字的漂亮度】,附详细解题思路

一、题目描述 给出一个字符串,该字符串仅由小写字母组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。 每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个不同字母拥有相同的“漂亮度”。字母忽略大小写。 给出多个…

Ex-ChatGPT本地部署+Azure OpenAI接口配置+docker部署服务

Ex-ChatGPT项目分为 Ex-ChatGPT 和 WebChatGPTEnhance 两部分,Ex-ChatGPT启动后是个web服务,通过访问ip端口体验; WebChatGPTEnhance可编译生成一个浏览器插件,Chrome或者Microsoft edge浏览器可以安装该插件,点击该插…

Golang中文件目录操作的实现

目录 文件 文件目录 文件目录操作 读取文件 一、方法一 (file.Read()) 二、方法二 (bufio读取文件) 三、方法三 (ioutil 读取方法) 写入文件 一、方法一 二、方法二 三、方法三 (ioutil写入文件) 复制文件 一、方法一 二、方法二 文件 Golang中,文件是…

python异常处理速通

一.异常处理认识 1.基础认识 开发人员在编写程序时,难免会遇到错误,有的是编写人员疏忽造成的语法错误,有的是程序内部隐含逻辑问题造成的数据错误,还有的是程序运行时与系统的规则冲突造成的系统错误,等等。总的来说…

什么是肖特基二极管

普通二极管是由N型半导体和P型半导体接触制成,交界面形成PN结。 肖特基二极管是由N型半导体和金属接触制成,交界面形成肖特基结。 肖特基结的形成主要是因为N型半导体中的电子更容易逸出进入到金属,从而在接触面N型半导体失去电子形成正离子区…

python:绘制GAM非线性回归散点图和拟合曲线

作者:CSDN _养乐多_ 本文将介绍使用python语言绘制广义线性模型(Generalized Additive Model,GAM)非线性回归散点图和拟合曲线。并记录了计算RMSE、ubRMSE、R2、Bias的代码。 文章目录 一、GAM非线性回归详解二、代码三、计算RM…

docker 镜像/容器的打包、导出、导入

目录 一、将变动过的容器打包生成新的镜像 二、对镜像进行导出导入 1、将镜像导出为一个镜像img文件 2、将img镜像文件导入,复制出一个完全一样镜像 三、对容器进行导入导出 1、将容器导出为一个镜像tar文件 2、将镜像tar文件导入,生成一个新镜像…

Linux本地搭建GitLab服务器 - 内网穿透远程访问

文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar内网穿透5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 转载自cpolar极点云文章:Linux搭建GitLab私有仓库,并内网穿透实…

vite构建的项目如何修改element Plus的主题样式

安装element plus 安装icon pnpm install element-plus pnpm install element-plus/icons-vue main.ts配置 icon的使用https://element-plus.gitee.io/zh-CN/component/icon.html#%E7%BB%93%E5%90%88-el-icon-%E4%BD%BF%E7%94%A8 import { createApp } from vue import ./sty…

【工具】vscode的常用插件之git插件

🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd🌐系列专栏:善假于物&#…

计算机视觉cv模型最新进展速看:

华为诺亚实验室等研究者提出动态分辨率网络 DRNet 深度卷积神经网络通畅采用精细的设计,有着大量的可学习参数,在视觉任务上实现很高精 确度要求。为了降低将网络部署在移动端成本较高的问题,近来发掘在预定义架构上的冗余 已经取得了巨大的…

Midjourney AI绘画中文教程详解(完整版)模型、命令、参数与各种高级用法

我有一种预感,您一下子看不完这篇内容,您得【收藏】一下,以便下次接着看~~ Midjourney AI绘画中文教程,Midjourney是一款2022年3月面世的AI绘画工具,创始人是David Holz。 只要输入想到的文字,就能通过人…

数据库sqlserver-----触发器的插入,更新和删除

在学习触发器之前,先弄清DDL,DML,DQL,DCL的区别: http://t.csdn.cn/Le3wA 触发器就是当执行某个事件的时候触发另一个事件的执行,根据事件的触发时间可分为 before和after Before与After区别:before:(insert、update)可以对new…

数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)

目录 题目描述 输入示例 输出示例 解题思路 解题方法(C语言) 解析 题目描述 有序的二叉树遍历可以用堆栈以非递归的方式实现。 例如: 假设遍历一个节点数为6的二叉树(节点数据分别为1到6)时, 堆…

immersive-translate 安装,个人觉得一款超级好用的浏览器翻译插件

immersive-translate 安装,个人觉得一款超级好用的浏览器翻译插件 immersive-translate 是什么Github 地址主要特性立即安装使用 immersive-translate immersive-translate 是什么 Immersive Dual Web Page Translation Extension - 沉浸式双语网页翻译扩展。 Git…

MSP432学习笔记5——外部中断

所用单片机型号:MSP432P401r 今日继续我的MSP432电赛速通之路。 外部中断是个很有用的配置 STM32几乎每个I/O口都能配置复用为外部中断 但MSP432并不是这样。 我经过查阅数据手册发现支持中断的引脚为: P1^0~ P1^7 P3^0~ P3^7 P5^0~ P5^…

【Python习题】Python课程设计的作业分小组完成得分计算(实现代码)

目录 题目思路分析代码实现效果总结 主要内容是校设课程的习题和课外学习的一些习题。 欢迎关注 『Python习题』 系列,持续更新中 欢迎关注 『Python习题』 系列,持续更新中 题目 【题目描述】Python课程设计的作业分小组完成,规定小组成员1…

​Shodan新手入坑指南​

什么是 Shodan? 首先,Shodan 是一个搜索引擎,但它与 Google 这种搜索网址的搜索引擎不同,Shodan 是用来搜索网络空间中在线设备的,你可以通过 Shodan 搜索指定的设备,或者搜索特定类型的设备,其…

【C++】结构体 - 定义和使用,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,结构体const

文章目录 1. 定义和使用2. 结构体数组3. 结构体指针4. 结构体嵌套结构体5. 结构体做函数参数6. 结构体const 1. 定义和使用 结构体属于用户自定义的数据类型,允许用户存储不同的数据类型。 struct 结构体 {结构体成员列表}; 通过结构体创建变量的方法有三种&…