嵌入式 QT 界面布局管理

news2024/11/17 8:40:04

目录

1、实例程序功能

2、界面组件布局

2.1 界面组件的层次关系

2.2 布局管理

2.3 伙伴关系和Tab顺序

 

1、实例程序功能

    创建一个 Widget Application 项目 samp2_2, 在创建窗体时选择基类 QDialog ,生成的类命名为 QWDialog ,并选择生成窗体。
    如 此 新建 的项 目 samp2_2 有一 个界 面文 件 qwdialog.ui , 一 个头 文件 qwdialog.h 和源 程序 文件 qwdialog.cpp。此外,还有项目文件 samp2_2.pro 和主程序文件 main.cpp
qwdialog.ui 界面文件设计时界面如图 1 所示。程序的主要功能是对中间一个文本框的文字字体样式和颜色进行设置。
实例程序 samp2_2 设计时界面

 

在界面设计时,对需要访问的组件修改其 objectName ,如各个按钮、需要读取输入的编辑框、需要显示结果 的标签等,以便在程序里区分。对于不需要程序访问的组件则无需修改其 objectName ,如用于界面上组件分组 的 GroupBox Frame 、布局等,让 UI 设计器自动命名即可。

 对于界面组件的属性设置,需要注意以下几点。

1. objectName 是窗体上创建的组件的实例名称,界面上的每个组件需要有一个唯一的 objectName ,程序 里访问界面组件时都是通过其 objectName 进行访问,自动生成的槽函数名称里也有 objectName 。所以, 组件的 objectName 需要在设计程序之前设置好,设置好之后一般不要再改动。若设计程序之后再改动 objectName,涉及的代码需要相应的改动。
2. 窗体的 objectName 就是窗体的类名称,在 UI 设计器里不要修改窗体的 objectName ,窗体的实例名称 需要在使用窗体的代码里去定义。

 

2、界面组件布局

   Qt 的界面设计使用了布局(Layout)功能。所谓布局,就是界面上组件的排列方式,使用布局可以使组件有 规则地分布,并且随着窗体大小变化自动地调整大小和相对位置。布局管理是 GUI 设计的必备技巧,下面逐步 讲解如何实现图 1 所示的界面设计。

2.1 界面组件的层次关系

   为了将界面上的各个组件的分布设计得更加美观,经常使用一些容器类,如 QgoupBox QtabWidget QFrame 等。
例如,将 3 CheckBox 组件放置在一个 GroupBox 组件里,该 GroupBox 组件就是这 3 CheckBox 的容器,移动这个 GroupBox 就会同时移动其中的 3 CheckBox
3 显示的是设计图 1 界面的前期阶段。在窗体上放置了 2 GroupBox 组件,在 groupBox1 里放置 3 个 CheckBox 组件,在 groupBox2 里放置 3 RadioButton 组件。图 3 右侧 Object Inspector 里显示了界面上个组件之间的层次关系。

2.2 布局管理

Qt 为界面设计提供了丰富的布局管理功能,在 UI 设计器中,组件面板里有 Layouts Spacers 两个组件 面板,在窗体上方的工具栏里有布局管理的按钮

 

Layouts Spacers 两个组件面板里的布局组件的功能见表

 

使用组件面板里的布局组件设计布局时,先拖放一个布局组件到窗体上,如在设计图 4 3 个按钮的布局 时,先放一个 Horizontal Layout 到窗体上,布局组件会以红色边框显示。再往布局组件里拖放 3 Push Button 和 2 Horizontal Spacer ,就可以得到图 1 3 个按钮的水平布局效果。
在设计窗体的上方有一个工具栏,用于调整设计器进入不同的状态,以及进行布局设计,工具栏上各按钮的功能见表

 使用工具栏上的布局控制按钮时,只需在窗体上选中需要设计布局的组件,然后点击某个布局按钮即可。在窗体上选择组件时同时按住 Ctrl 键,可以实现组件多选,选择某个容器类组件,相当于选择了其内部的所有组件。

例如,在图 3 的界面中,选中 groupBox1 ,然后单击“ Lay Out Horizontally ”工具栏按钮,就可以对 groupBox1 内的 3 CheckBox 水平布局。
在图 4 的界面上,使 groupBox1 里的 3 CheckBox 水平布局, groupBox2 里的 3 RadioButton 水平 布局,下方 3 个按钮水平布局。在窗体上又放置了一个 PlainTextEdit 组件。现在,改变 groupBox1 groupBox2 或按钮的水平布局的大小,其内部组件都会自动改变大小。但是当改变窗体大小时,界面上的各件却并不会自 动改变大小。
随后还需为窗体指定一个总的布局。选中窗体(即不要选择任何组件),单击工具栏上的“ Lay Out Vertically ” 按钮,使 4 个组件垂直分布。这样布局后,当窗体大小改变时,各个组件都会自动改变大小。
UI 设计器里可视化设计布局时,要善于利用水平和垂直空格组件,善于设置组件的最大、最小宽度和高 度来实现某些需要的布局效果。

2.3 伙伴关系和Tab顺序

UI 设计工具栏上单击“ Edit Buddies ”按钮可以进入伙伴关系编辑状态,如设计一个窗体时,进入伙伴编辑状态之后的界面如图;
伙伴关系( Buddy )是指界面上一个 Label 和一个组件相关联,如图 7 中的伙伴关系编辑状态,单击一个 Label,按住鼠标左键,然后拖向一个组件,就建立了 Label 和组件之间的伙伴关系。
伙伴关系是为了在程序运行时,在窗体上用快捷键快速将输入焦点切换到某个组件上。例如,在图 7 的界 面上,设定“姓名”标签的 Text 属性为“姓名 (&N) ”,其中符号“ & ”用来指定快捷字符,界面上并不显“ & ”, 这里指定快捷字母为 N 。那么程序运行时,用户按下 Alt+N ,输入焦点就会快速切换到“姓名”关联的输入框内。
UI 设计器工具栏上单击“ Edit Tab Order ”按钮进入 Tab 顺序编辑状态(如图 8 所示)。 Tab 顺序是指在 程序运行时,按下键盘上的 Tab 键时输入焦点的移动顺序。一个好的用户界面,在按 Tab 键时,焦点应该以合理的顺序在界面上移动,而不是随意地移动。
进入 Tab 顺序编辑状态后,在界面上会显示具有 Tab 顺序组件的编号,依次按希望的顺序单击组件,就可以重排 Tab 顺序了。没有输入焦点的组件是没有 Tab 顺序的,如 Label 组件。

 

 

 

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

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

相关文章

Python实用记录(十三):python脚本打包exe文件并运行

文章目录 打包准备文件准备环境安装 具体运行第一步第二步第三步 注意 打包准备 文件准备 这里准备一个简单的python代码(打开电脑摄像头) import cv2 if __name__ __main__:cap cv2.VideoCapture(0)ret, frame cap.read()while ret:ret, frame c…

希亦洗地机和添可洗地机哪个好用?口碑洗地机详细对比

在当今这个科技发达的社会,为了能够帮助人们高效率的工作,各色各样的发明不断出现。扫地、拖地是我们日常生活中再普通不过的一项家务了,对于小型的房子而言打扫起来就比较轻松,对于繁忙的上班族打扫空间较大的房子就很困难&#…

Undo Log详解

undo log 基本概念 undo log是一种用于撤销回退的日志,在数据库事务开始之前,MySQL会先记录更新前的数据到undo log日志文件里面,当事务回滚时或者数据库崩溃时,可以利用 undo log来进行回退 Undo Log产生和销毁:Und…

redis(2)

缓存:缓存是一个高速数据交换的存储器,使用它可以迅速的访问和操作数据 因为单体应用已经不适用于现在的环境了,所以最终变成分布式系统,本地缓存已经不适用了 1)比如说张三用户访问了应用程序nginx把请求分配给A服务器 A机器查询数据库,并且把数据库的结…

模型实战(11)之win10下Opencv+CUDA部署yolov5、yolov8算法

win10下Opencv+CUDA部署yolov5、yolov8算法 测试环境:AMDRH7000+RTX3050+win10+vs2-10+opencv455+cuda11.7关于opencv470+contrib+cuda的编译,可以详见:Win10下Opencv+CUDA联合编译详细教程本文代码同时支持yolov5、yolov8两个模型,详细过程将在文中给出,完整代码仓库最后…

自动化测试真的能提效吗?怎么才能真正掌握自动化测试技巧呢?

近年来,随着软件开发速度的提高,自动化测试已经成为了一个必要的环节。但是,对于自动化测试,有些人认为它能够大幅提升效率,而有些人则认为自动化测试无法替代手工测试,并且实施自动化测试需要投入大量的时…

vue3 - 超详细头像裁剪并上传到服务器,支持按照自定义比例裁切图片效果组件插件(详细示例源码教程,一键复制运行开箱即用)

效果图 大部分都贼难用,而且全是bug。。并且很少有 vue3的,全是 vue2。。 本博客实现了在 vue3.js 项目中,实现图像上传后并按一定的比例进行裁剪的示例功能源码,支持各种参数、样式修改, 示例有 Element Plus + Vue3.js 版本,也有纯 Vue3.js 版本(无 UI 框架搭配),按…

【机器学习】西瓜书课后习题参考答案—第一章

记录西瓜书课后习题的思考与参考答案。 1.1 表1.1中若只包含编号为1和4的两个样例,试给出相应的版本空间。 答: 版本空间:与训练集一致的“假设集合”,称之为“版本空间”(version space) 只包含编号为1和…

Vue-cli搭建项目(包含Node.js安装和ElementUI安装)

目录 一、vue-cli 二、Node.js npm: Node.js安装: 测试: 三、Vue-cli搭建项目 使用HBuildex 创建一个vue.js项目 创建的自己的组件: 组件路由: 四、ElementUI安装 1.ElementUI下载: 2.在main.js中…

Echarts图表X轴文本过长导致展示不全

今天就遇到如题目所说问题。遇到问题当然取看官方文档喽,链接奉上ECharts-axis 博主使用的ECharts版本号为5.4.5 这个问题效果图如下: 可以看到x轴文本太长,导致部分x轴标签无法正常显示,在这里提供两种解决办法,并告诉…

OSI七层网络模型+TCP/IP四层模型

OSI七层模型: 物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就…

6、Flutterr聊天界面网络请求

一、准备网络数据 1.1 数据准备工作 来到网络数据制造的网址,注册登录后,新建仓库,名为WeChat_flutter;点击进入该仓库,删掉左侧的示例接口,新建接口. 3. 接着点击右上角‘编辑’按钮,新建响应内容,类型为Array,一次生成50条 4. 点击chat_list左侧添加按钮,新建chat_list中的…

华为OD机试2023年最新题库(JAVA)

目录 华为OD机试是什么?华为OD面试流程?华为OD机试通过率高吗?华为OD薪资待遇?华为OD晋升空间?华为OD刷题列表,一天三题,刷出算法新高度,刷出人生新际遇。 大家好,我是哪…

什么是http代理504网关超时错误,要如何修复?

当你在使用 HTTP 代理时,有时候会遇到"504 网关超时"错误,这个错误看起来非常可怕,但实际上它并不是一个很难解决的问题。在本文中,我将向你介绍 504 错误的定义,以及为什么我们会遇到这个错误,同…

babysql

打开界面是一个登录框,所以直接使用的万能公式,但是没用出发了报错 结合提示来看,题目应该是过滤掉了or 尝试大小写绕过,失败了 尝试双写绕过,成功绕过限制 接下来就判断字段数,发现by也被过滤掉了 登是登上…

CAM350 PCB开短路检查指导

CAM350 PCB开短路检查指导 Layout完成后,通过DRC和华秋DFM检查没有问题后,使用CAM350进行开短路的检查,没有问题后可转交制版厂。 ①首先通过AD生成IPC文件,下图为生成步骤: File→Assembly Outputs→Test Point Repo…

新形势下,如何进行智慧园区移动应用建设?

智能化工园区通过信息化实现工业管理的数字化和网络化,实现对生产过程的全面监控和实时数据采集。这使企业能够更好地管理,及时发现问题并采取相应的措施来降低成本。此外,智慧化管理提高了企业资源的使用效率,避免浪费和重复利用…

异常___

规则:玩家是异常机器人,要突破正常机器人(防火墙)的扫描封锁攻击,到达目的地。 (1) 教学内容:指令的形式和运行方法。 简单的说就是脚本语言,指令的形式是给出固定顺序…

行为型模式-中介者模式

中介者模式 概述 一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如在下左图中&#xf…

协方差矩阵

目录 1.方差和协方差的定义 2.协方差矩阵 3. 协方差矩阵的应用 3.1 对两个类内协方差矩阵进行对角化 3.2 机器学习中的协方差矩阵应用小结 4. 协方差矩阵中心对齐 1.方差和协方差的定义 2.协方差矩阵 3. 协方差矩阵的应用 3.1 对两个类内协方差矩阵进行对角化 对两个…