QML布局和信号槽

目录

一、定位器(Positioners)

1.Row(行定位器)

2.Column(列定位器)

3.Grid(表格定位器)

二、Layout布局

1.RowLayout(行布局)

2.ColumnLayout(列布局)

3.GridLayout(网格布局)

4.StackLayout

三、信号与槽

1.信号

2.槽

3.连接


一、定位器(Positioners)

Row、Column、Grid这些定位器使用anchors属性来定位子元素。anchors提供了一种方式,通过指定一个元素与其他元素的关系来确定元素在界面中的位置,例如可以使用anchors.left、anchors.right、anchors.top和anchors.bottom等属性来设置元素的对齐方式和边距。

1.Row(行定位器)

Row可以将它的子元素排列成一行,是一种将其子项沿单个行定位的容器类型。

2.Column(列定位器)

Column可以将它的子元素排列成一列,是一种将其子项沿单个列定位的容器类型。

共有属性spacing:用于设置子元素之间的间距,默认间距为0。

   

3.Grid(表格定位器)

Grid是一种以网格形式定位其子items的类型,创建一个足够大的单元格网格以容纳其所有子items,并将这些items从左到右和从上到下放置在单元格中,每个items都位于其单元格的左上角,位置为(0, 0)。

属性

  • rows:保存网格中的行数。
  • columns:保存网格中的列数,默认列数为4。
  • spacing:设置子元素之间的间距,默认间距为0。
  • columnSpacing:设置列与列之间的间距。
  • rowSpacing:设置行与行之间的间距。
  • layoutDirection:指定定位器的排列方式,默认是Qt.LeftToRight,即子元素从左到右排列;也可设置为Qt.RightToLeft,使子元素从右到左排列。

    

示例:

import QtQuickWindow {width: 640height: 480visible: truetitle: qsTr("Hello World")Column {anchors.fill: parentRectangle {anchors.left: parent.leftanchors.right: parent.rightheight: 50color: "red"}Rectangle {anchors.left: parent.leftanchors.right: parent.rightheight: 50color: "green"}Rectangle {anchors.left: parent.leftanchors.right: parent.rightheight: 30color: "blue"}Row {anchors.left: parent.leftanchors.right: parent.rightheight: 100Rectangle {anchors.top: parent.topanchors.bottom: parent.bottomwidth: 50color: "aliceblue"}Rectangle {anchors.top: parent.topanchors.bottom: parent.bottomwidth: 30color: "pink"}}Grid {anchors.left: parent.leftanchors.right: parent.rightcolumns: 2spacing: 5Rectangle {color: "red"width: parent.width / parent.columnsheight: 50}Rectangle {color: "blue"width: parent.width / parent.columnsheight: 50}Repeater {model: 6Rectangle {color: "aliceblue"width: parent.width / parent.columnsheight: 30border.color: "black"}}}}
}

  

二、Layout布局

RowLayout、ColumnLayout、GridLayout:这些布局管理器提供了一些附加属性来控制子元素的定位,如Layout.minimumWidth、Layout.minimumHeight、Layout.maximumWidth、Layout.maximumHeight、Layout.preferredWidth和Layout.preferredHeight等,这些属性可以用于设置子元素的最小、最大和首选尺寸。

1.RowLayout(行布局)

RowLayout用于将子元素水平排列在一行中。它会根据子元素的大小和布局属性自动调整它们的位置和大小,以适应父元素的宽度。

RowLayout {anchors.fill: parentRectangle {Layout.preferredHeight: 50  //height: 50Layout.fillWidth: truecolor: "red"}Rectangle {Layout.preferredHeight: 50  //height: 50Layout.fillWidth: truecolor: "blue"}Rectangle {Layout.preferredHeight: 50  //height: 50Layout.alignment: Qt.AlignTop  //anchors.top: parent.topLayout.fillWidth: truecolor: "green"}
}

  

2.ColumnLayout(列布局)

ColumnLayout用于将子元素垂直排列在一列中。它会根据子元素的大小和布局属性自动调整它们的位置和大小,以适应父元素的高度。

ColumnLayout {anchors.fill: parentspacing: 0Rectangle {Layout.alignment: Qt.AlignLeftLayout.preferredWidth: 50Layout.fillHeight: truecolor: "red"}Rectangle {Layout.alignment: Qt.AlignCenterLayout.preferredWidth: 50Layout.fillHeight: truecolor: "green"}Rectangle {Layout.alignment: Qt.AlignRightLayout.preferredWidth: 50Layout.fillHeight: truecolor: "blue"}
}

  

3.GridLayout(网格布局)

GridLayout用于将子元素排列在一个网格中。它创建一个足够大的单元格网格以容纳所有子元素,并将它们从左到右、从上到下放置在单元格中。

GridLayout {anchors.fill: parentcolumns: 3Repeater {model: 7Rectangle {Layout.fillHeight: trueLayout.fillWidth: truecolor: "aliceblue"}}
}

  

4.StackLayout

属性:

  • Orientation:用于指定布局方向,有两个取值,Vertical表示垂直方向布局,Horizontal表示水平方向布局,默认值是Vertical。
  • Spacing:用于设置每个子视图之间的间隙,默认为6.0。
  • VerticalOptions和HorizontalOptions:用于布局定位和设置布局元素大小,有8个属性值,分别是Start、Center、End、Fill、StartAndExpand、CenterAndExpand、EndAndExpand、FillAndExpand。这些属性值可以根据其他布局的内容大小自动填充空白位置。
  • Children:用于在代码中灵活地添加子控件,可以通过向该集合中添加控件来实现动态添加。
  • count:保存属于布局的项目数,只有作为StackLayout子项的item才会成为布局的候选对象。
  • currentIndex:保存当前在StackLayout中可见的子项的索引,默认情况下,空布局为 -1,否则默认为0(指第一项)。

应用场景:

  • 界面切换:常用于实现选项卡式界面或在有限空间内切换不同视图或内容的界面。
  • 简单列表或表单布局:适用于创建简单的垂直或水平列表,或用于排列表单中的输入字段和标签。
  • 导航栏或工具栏布局:可用于创建水平方向的导航栏或工具栏,将多个按钮或图标水平排列。
StackLayout {id: stackanchors.fill: parentRectangle {color: "blue"TapHandler {onTapped: stack.currentIndex = 1;}}Rectangle {color: "red"TapHandler {onTapped: stack.currentIndex = 0;}}
}

点击界面实现颜色切换。

     

三、信号与槽

1.信号

使用signal关键字在QML对象内部定义信号,可以有参数也可以无参数。

由对象内部逻辑或外部事件(如鼠标点击、键盘输入等)触发,触发时就像调用函数一样,如果有参数需要传入正确的参数值。

2.槽

本质是JavaScript函数,定义在QML对象内部,用于处理信号传来的事件或数据。

3.连接

Connections对象用于连接信号与槽。通过设置target为信号源对象,然后定义on<SignalName>函数来处理信号。

在合适的对象关系下(如同一个对象或父子对象关系等),可以直接通过属性绑定的方式连接信号和槽。例如,在Button的onClicked触发信号,在同一个对象中定义on<SignalName>来处理信号。

示例:

Window {id: windowwidth: 640height: 480visible: truetitle: qsTr("Hello World")signal testSig(string s, int x)Button {width: 100height: 50anchors.centerIn: parentonClicked: testSig("abc",123)}Connections {target: window  //不能用parentfunction onTestSig(str, value){console.log(str,value);}}
}

Connections的target属性需要明确指向一个对象,而parent是一个动态属性,如果绑定parent可能无法在Connections初始化时正确解析。
 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ Primer 类型转换

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

.Net使用EF Core框架如何连接Oracle

目录 一、Nutget包添加 二、 配置文件 三、创建实体类 四、创建数据库上下文类 五、将数据库上下文服务注册到容器 六、测试数据库数据 &#xff08;1&#xff09;编写PeopleController &#xff08;2&#xff09;编写People页面 一、Nutget包添加 一定要安装Oracle.Ma…

30~32.ppt

目录 30.导游小姚-介绍首都北京❗ 题目​ 解析 31.小张-旅游产品推广文章 题目 解析 32.小李-水的知识❗ 题目​ 解析 30.导游小姚-介绍首都北京❗ 题目 解析 新建幻灯片-从大纲-重置-检查设计→主题对话框→浏览主题&#xff1a;考生文件夹&#xff08;注意&#x…

2025 年 2 月 TIOBE 指数

2025 年 2 月 TIOBE 指数 二月头条:快,更快,最快! 现在,世界需要每秒处理越来越多的数字,而硬件的发展速度却不够快,程序的速度变得越来越重要。话虽如此,快速编程语言在 TIOBE 指数中取得进展也就不足为奇了。编程语言 C++ 最近攀升至第 2 位,Go 已稳居前 10 名,Ru…

【Flink源码分析】5. Flink1.19源码分析-异步编程(CompletableFuture)

5 CompletableFuture 实现异步编排&#xff1b;获取异步任务执行的结果。 CompletableFuture提供了几十种方法&#xff0c;辅助我们的异步任务场景。这些方法包括创建异步任务、异步任务回调、多个任务组合处理等方面。 5.1 supplyAsync 方法 supplyAsync 执行 Completable…

LabVIEW在呼吸机测试气体容量计算

在呼吸机测试中&#xff0c;精确测量气体容量变化是评估设备性能的关键步骤。通过监测呼吸机气道内的压力变化&#xff0c;并结合流阻和肺顺应性等参数&#xff0c;可以计算出单位时间内的气体容量变化。本案例基于LabVIEW实现该计算过程&#xff0c;以确保测试数据的准确性和一…

Lombok使用指南

引言 lombok作为减少我们代码量的利器&#xff0c;本文将列举常用的几个注解&#xff0c;来帮助减少代码量 注解及其功能 Getter 和 Setter import lombok.Getter; import lombok.Setter;Getter Setter public class Person {private String name;private int age; } …

JAVA学习第一天

String的构造方法-118 String创建对象的特点——119 String字符串的比较——120 字符串的遍历——122 两个函数&#xff1a;length&#xff08;&#xff09;&#xff0c;charAt&#xff08;&#xff09; StringBuilder——127 String的内容是不可变的 StringBuilder的内容是可变…

sqli-lab靶场学习(六)——Less18-22(User-Agent、Referer、Cookie注入)

前言 前面的关卡&#xff0c;都是直接在输入框或者浏览器的地址栏上做文章即可。但本文这几关&#xff0c;需要用工具拦截请求修改请求头部才行。 Less18&#xff08;User-Agent注入&#xff09; 本关的注入点在User-Agent。我们在用户名和密码框中输入admin/admin后&#xf…

Spring依赖注入方式

写在前面&#xff1a;大家好&#xff01;我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正&#xff0c;感谢大家的不吝赐教。我的唯一博客更新地址是&#xff1a;https://ac-fun.blog.csdn.net/。非常感谢大家的支持。一起加油&#xff0c;冲鸭&#x…

arcgis界址点编号工具开发原理(西北角顺时针)

arcgis界址点编号工具开发原理&#xff08;西北角顺时针&#xff09; 1、工具实现思路。寻找离包络矩形左顶角最近的点作为起点。如下图&#xff1a;距离包络矩形左顶角最近的点&#xff0c;作为J1点没有任何问题。 问题在于并不是所有的地块&#xff0c;都这么中规中矩、合情…

分布式服务框架 如何设计一个更合理的协议

1、概述 前面我们聊了如何设计一款分布式服务框架的问题&#xff0c;并且编码实现了一个简单的分布式服务框架 cheese, 目前 cheese 基本具备分布式服务框架的基本功能。后面我们又引入了缓存机制&#xff0c;以及使用Socket替代了最开始的 RestTemplate。并且还学习了网络相关…

生信云服务器:让生物信息学分析更高效、更简单【附带西柚云优惠码】

随着生物信息学的快速发展&#xff0c;基因组测序、单细胞分析等复杂任务逐渐成为研究者们的日常工作。然而&#xff0c;个人电脑在处理这些任务时往往面临性能瓶颈&#xff0c;如内存不足、运算速度慢等问题&#xff0c;导致分析任务频繁失败或崩溃。为了解决这一难题&#xf…

[AUTOSAR通信] - PDUR模块解读

点击订阅专栏不迷路 文章目录 一、 PDUR模块概述二、功能描述2.1 发送路由功能2.2 接收路由功能2.3 网关路由功能2.4 路由控制功能 三、配置項介紹3.1. PduRBswModules3.2. PduRGeneral3.3. PduRRoutingTables3.4. PduRRoutingPath3.5. PduRSrcPdu3.6. PduRDestPdu 四、总结 &g…

分治下的快速排序(典型算法思想)—— OJ例题算法解析思路

目录 一、75. 颜色分类 - 力扣(LeetCode) 运行代码: 一、算法核心思想 二、指针语义与分区逻辑 三、操作流程详解 四、数学正确性证明 五、实例推演(数组[2,0,2,1,1,0]) 六、工程实践优势 七、对比传统实现 八、潜在问题与解决方案 九、性能测试数据 十、扩展…

分层耦合 - IOC详解

推荐使用下面三种, 第一种多用于其他类 声明bean的时候&#xff0c;可以通过value属性指定bean的名字&#xff0c;如果没有指定&#xff0c;默认为类名首字母小写。 使用以上四个注解都可以声明bean&#xff0c;但是在springboot集成web开发中&#xff0c;声明控制器bean只能用…

PDF Shaper:免费多功能 PDF 工具箱,一站式满足您的 PDF 需求!

​PDF Shaper 是一款功能强大且完全免费的 PDF 工具箱&#xff0c;它几乎涵盖了日常 PDF 操作的方方面面&#xff0c;无论是转换、编辑还是处理&#xff0c;都能轻松搞定。以下是这款软件的详细介绍&#xff1a; 功能丰富&#xff0c;一应俱全 PDF 转换功能强大 PDF 转 Word&am…

未来替代手机的产品,而非手机的本身

替代手机的产品包括以下几种&#xff1a; 可穿戴设备&#xff1a;智能手表、智能眼镜等可穿戴设备可以提供类似手机的功能&#xff0c;如通话、信息推送、浏览网页等。 虚拟现实&#xff08;VR&#xff09;技术&#xff1a;通过佩戴VR头显&#xff0c;用户可以进行语音通话、发…

deepseek+“D-id”或“即梦AI”快速生成短视频

1、deepseek生成视频脚本 1.1、第一步&#xff1a;使用通用模板提出需求&#xff0c;生成视频脚本 对话输入示例脚本1&#xff1a; 大年初五是迎财神的日志&#xff0c;帮我生成10秒左右的短视频&#xff0c; 体现一家3口在院子里欢庆新年&#xff0c; 孩子在院子里放鞭炮烟…

在CT107D单片机综合训练平台上实现外部中断控制LED闪烁

引言 在单片机开发中&#xff0c;外部中断是一个非常重要的功能&#xff0c;它可以让单片机在检测到外部信号变化时立即做出响应。本文将详细介绍如何在CT107D单片机综合训练平台上使用外部中断来控制LED灯的闪烁。我们将使用两种不同的方式来实现这一功能&#xff1a;一种是在…