【QT】容器类控件

目录

概述

Group Box

核心属性 

Tab Widget

核心属性

核心信号

核心方法 

使用示例:

布局管理器

垂直布局

核心属性

使用示例:

水平布局

核⼼属性 (和 QVBoxLayout 属性是⼀致的)

网格布局

核心属性

使用示例:

示例: 设置水平拉伸系数

示例:设置垂直拉伸系数

表单布局

使用示例:

spacer

核心属性

使用示例:


概述

        所谓容器类控件就是可以容纳其他控件的控件。这与之前多元素控件不一样的地方是:多元素控件包含的内容,是一个一个自定义好的 ”Item“ 对象。而容器类控件,包含的内容是前面所介绍过的各种控件。

Group Box

使⽤ QGroupBox 实现⼀个带有标题的分组框. 可以把其他的控件放到⾥⾯作为⼀组. 这样看起来能更好看⼀点

核心属性 

属性说明
title
分组框的标题
alignment
分组框内部内容的对⻬⽅式
flat
是否是 "扁平" 模式
checkable
是否可选择.
设为 true, 则在 title 前⽅会多出⼀个可勾选的部分.
checked
描述分组框的选择状态 (前提是 checkable 为 true)

Tab Widget

使⽤ QTabWidget 实现⼀个带有标签⻚的控件, 可以往⾥⾯添加⼀些 widget. 进⼀步的就可以通过标签⻚来切换.

核心属性

属性方法
tabPosition
标签⻚所在的位置.
  • North 上⽅
  • South 下⽅
  • West 左侧
  • East 右侧
currentIndex
当前选中了第⼏个标签⻚ (从 0 开始计算)
currentTabText
当前选中的标签⻚的⽂本
currentTabName
当前选中的标签⻚的名字
currentTabIcon
当前选中的标签⻚的图标
currentTabToolTip
当前选中的标签⻚的提⽰信息
tabsCloseable
标签⻚是否可以关闭
movable
标签⻚是否可以移动

核心信号

属性说明
currentChanged(int)
在标签⻚发⽣切换时触发, 参数为被点击的选项卡编号
tabBarClicked(int)
在点击选项卡的标签条的时候触发. 参数为被点击的选项卡编号.
tabBarDoubleClicked(int)
在双击选项卡的标签条的时候触发. 参数为被点击的选项卡编号.
tabCloseRequest(int)
在标签⻚关闭时触发. 参数为被关闭的选项卡编号.

核心方法 

方法说明
count()
获取到标签⻚的个数
addTab
新增标签⻚
removeTab
删除标签⻚
currentIndex
获取到当前标签⻚的下标
setCurrentIndex
切换当前标签⻚

使用示例:

1. 添加新的标签页

    //获取当前有几个标签页了int count = ui->tabWidget->count();//创建新的widgetQWidget* w = new QWidget();ui->tabWidget->addTab(w,QString("Tab")+QString::number(count+1));

2. 删除选中标签页

    int curIndex = ui->tabWidget->currentIndex();ui->tabWidget->removeTab(curIndex);

布局管理器

⼀个 widget 只能包含⼀个 layout.

垂直布局

使⽤ QVBoxLayout 表⽰垂直的布局管理器. V 是 vertical 的缩写

核心属性

属性说明
layoutLeftMargin
左侧边距
layoutRightMargin
右侧边距
layoutTopMargin
上⽅边距
layoutBottomMargin
下⽅边距
layoutSpacing
相邻元素之间的间距

使用示例:

   //创建三个按钮QPushButton* btn1 = new QPushButton("按钮1");QPushButton* btn2 = new QPushButton("按钮2");QPushButton* btn3 = new QPushButton("按钮3");//创建布局管理器QVBoxLayout* layout = new QVBoxLayout();layout->addWidget(btn1);layout->addWidget(btn2);layout->addWidget(btn3);//把布局管理器添加到窗口this->setLayout(layout);

 也可以选中要放入管理器的控件,如下:

最终效果:

水平布局

使⽤ QHBoxLayout 表⽰垂直的布局管理器. H 是 horizontal 的缩写.

核⼼属性 (和 QVBoxLayout 属性是⼀致的)

属性说明
layoutLeftMargin
左侧边距
layoutRightMargin
右侧边距
layoutTopMargin
上⽅边距
layoutBottomMargin
下⽅边距
layoutSpacing
相邻元素之间的间距

Layout ⾥⾯可以再嵌套上其他的 layout, 从⽽达到更复杂的布局效果;结合 QHBoxLayout QVBoxLayout , 就可以做出各种复杂的界⾯了。

网格布局

Qt 中还提供了 QGridLayout ⽤来实现⽹格布局的效果. 可以达到 M * N 的这种⽹格的效果.

核心属性

属性说明
layoutLeftMargin
左侧边距
layoutRightMargin
右侧边距
layoutTopMargin
上⽅边距
layoutBottomMargin
下⽅边距
layoutHorizontalSpacing
相邻元素之间⽔平⽅向的间距
layoutVerticalSpacing
相邻元素之间垂直⽅向的间距
layoutRowStretch
⾏⽅向的拉伸系数
layoutColumnStretch
列⽅向的拉伸系数

使用示例:

效果图:

#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QGridLayout>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QPushButton* btn1 = new QPushButton("按钮1");QPushButton* btn2 = new QPushButton("按钮2");QPushButton* btn3 = new QPushButton("按钮3");QPushButton* btn4 = new QPushButton("按钮4");QGridLayout* layout = new QGridLayout(this);layout->addWidget(btn1,0,0);layout->addWidget(btn2,0,1);layout->addWidget(btn3,1,0);layout->addWidget(btn4,1,1);
}

这里的addwidget的后两个参数是指定元素所在行号和列号 

当需要创建出尺寸不同的控件时,就可以通过拉伸系数来设置,拉伸系数就相当于设置控件之间尺寸的比例

示例: 设置水平拉伸系数

    layout->setColumnStretch(0,1);layout->setColumnStretch(1,2);

 如果拉伸系数为0(上述代码中的第二个参数),就是不参与拉伸,此时按钮的宽度是固定值

示例:设置垂直拉伸系数

 直接设置垂直拉伸系数是没有效果的,因为按钮垂直方向默认没有拉伸开(水平方向默认是拉伸的),因此垂直方向不会受到拉伸系数的影响了,需要设置SizePolicy。

使⽤ setSizePolicy 设置按钮的尺⼨策略. 可选的值如下:

  • QSizePolicy::Ignored : 忽略控件的尺⼨,不对布局产⽣影响。
  • QSizePolicy::Minimum : 控件的最⼩尺⼨为固定值,布局时不会超过该值。
  • QSizePolicy::Maximum : 控件的最⼤尺⼨为固定值,布局时不会⼩于该值
  • QSizePolicy::Preferred : 控件的理想尺⼨为固定值,布局时会尽量接近该值。
  • QSizePolicy::Expanding : 控件的尺⼨可以根据空间调整,尽可能占据更多空间。
  • QSizePolicy::Shrinking : 控件的尺⼨可以根据空间调整,尽可能缩⼩以适应空间。

 要想让垂直方向的拉伸系数生效,就需要让按钮能够拉伸展开,代码如下

btn1->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

然后再设置垂直方向的拉伸系数即可。 

表单布局

除了上述的布局管理器之外, Qt 还提供了 QFormLayout , 属于是 QGridLayout 的特殊情况, 专
⻔⽤于实现两列表单的布局.
这种表单布局多⽤于让⽤⼾填写信息的场景. 左侧列为提⽰, 右侧列为输⼊框
  • 使⽤ addRow ⽅法来添加⼀⾏. 每⾏包含两个控件. 第⼀个控件固定是 QLabel / ⽂本, 第⼆个控件 则可以是任意控件.
  • 如果把第⼀个参数填写为 NULL, 则什么都不显⽰

使用示例:

    // 创建 layoutQFormLayout* layout = new QFormLayout();this->setLayout(layout);// 创建三个 labelQLabel* label1 = new QLabel("姓名");QLabel* label2 = new QLabel("年龄");QLabel* label3 = new QLabel("电话");// 创建三个 lineEditQLineEdit* lineEdit1 = new QLineEdit();QLineEdit* lineEdit2 = new QLineEdit();QLineEdit* lineEdit3 = new QLineEdit();// 创建⼀个提交按钮QPushButton* btn = new QPushButton("提交");// 把上述元素添加到 layout 中layout->addRow(label1, lineEdit1);layout->addRow(label2, lineEdit2);layout->addRow(label3, lineEdit3);layout->addRow(NULL, btn);

spacer

使⽤布局管理器的时候, 可能需要在控件之间, 添加⼀段空⽩. 就可以使⽤ QSpacerItem 来表⽰.

核心属性

属性说明
width
宽度
height
⾼度
hData
⽔平⽅向的 sizePolicy
QSizePolicy::Ignored : 忽略控件的尺⼨,不对布局产⽣影响。
QSizePolicy::Minimum : 控件的最⼩尺⼨为固定值,布局时不会超过该值。
QSizePolicy::Maximum : 控件的最⼤尺⼨为固定值,布局时不会⼩于该值。
QSizePolicy::Preferred : 控件的理想尺⼨为固定值,布局时会尽量接近该
值。
QSizePolicy::Expanding : 控件的尺⼨可以根据空间调整,尽可能占据更多空
间。
QSizePolicy::Shrinking : 控件的尺⼨可以根据空间调整,尽可能缩⼩以适应
空间。
vData
垂直⽅向的 sizePolicy
选项同上.

使用示例:

    ui->setupUi(this);QHBoxLayout* layout = new QHBoxLayout();this->setLayout(layout);QPushButton* btn1 = new QPushButton("按钮1");QPushButton* btn2 = new QPushButton("按钮2");layout->addWidget(btn1);layout->addWidget(btn2);

在未引入spacer时,两个按钮创建是挨着的


QSpacerItem在初始化要指定宽度和高度 

ui->setupUi(this);QHBoxLayout* layout = new QHBoxLayout();this->setLayout(layout);QPushButton* btn1 = new QPushButton("按钮1");QPushButton* btn2 = new QPushButton("按钮2");QSpacerItem* space = new QSpacerItem(200,20);layout->addWidget(btn1);layout->addSpacerItem(space);layout->addWidget(btn2);

引入spacer后 

 

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

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

相关文章

2024亚太杯中文赛数学建模B题word+PDF+代码

2024年第十四届亚太地区大学生数学建模竞赛&#xff08;中文赛项&#xff09;B题洪水灾害的数据分析与预测&#xff1a;建立指标相关性与多重共线性分析模型、洪水风险分层与预警评价模型、洪水发生概率的非线性预测优化模型&#xff0c;以及大规模样本预测与分布特征分析模型 …

UI设计中瀑布流布局方式的特定和例子

在UI设计中&#xff0c;瀑布流布局方式&#xff08;Waterfall Layout&#xff09;是一种非常流行且有效的内容展示方式&#xff0c;其特定和例子可以归纳如下&#xff1a; 瀑布流布局的特定 视觉表现&#xff1a; 瀑布流布局呈现为参差不齐的多栏布局&#xff0c;随着页面滚…

数据集介绍与使用 M2DGR、KITTI、EuRoc,评测

SLAM 数据集汇总主页&#xff1a;https://github.com/qxiaofan/awesome-slam-datasets SLAM 数据 集综述论文&#xff1a;Simultaneous Localization and Mapping Related Datasets: A Comprehensive Survey 论文地址&#xff1a;https://arxiv.org/abs/2102.04036 M2DGR 简…

JAVA学习-练习试用Java实现“拼接最大数”

问题&#xff1a; 给定长度分别为 m 和 n 的两个数组&#xff0c;其元素由 0-9 构成&#xff0c;表示两个自然数各位上的数字。现在从这两个数组中选出 k (k < m n) 个数字拼接成一个新的数&#xff0c;要求从同一个数组中取出的数字保持其在原数组中的相对顺序。 求满足该…

iview中checkbox多选框带实际值和显示值的写法

<CheckboxGroup v-model"selectHotworkMeasures"><Checkboxv-for"item in hotworkMeasuresList":key"item.key">{{ item.name }}</Checkbox></CheckboxGroup>selectHotworkMeasures: [],

python操作SQLite3数据库进行增删改查

python操作SQLite3数据库进行增删改查 1、创建SQLite3数据库 可以通过Navicat图形化软件来创建: 2、创建表 利用Navicat图形化软件来创建: 存储在 SQLite 数据库中的每个值(或是由数据库引擎所操作的值)都有一个以下的存储类型: NULL. 值是空值。 INTEGER. 值是有符…

Python 算法交易实验76 QTV200日常推进

说明 最近实在太忙&#xff0c; 没太有空推进这个项目&#xff0c;我想还是尽量抽一点点时间推进具体的工程&#xff0c;然后更多的还是用碎片化的时间从整体上对qtv200进行设计完善。有些结构的问题其实是需要理清的&#xff0c;例如&#xff1a; 1 要先基于原始数据进行描述…

浪潮信息元脑服务器支持英特尔®至强®6能效核处理器 展现强劲性能

如今&#xff0c;服务器作为数字经济的核心基础设施&#xff0c;正面临着前所未有的挑战和机遇。作为服务器领域的领军企业&#xff0c;浪潮信息始终站在行业前沿&#xff0c;不断推陈出新&#xff0c;以满足客户日益增长的需求。近日&#xff0c;浪潮信息再次展现技术实力&…

基于GWO-CNN-BiLSTM数据回归预测(多输入单输出)-灰狼优化算法优化CNN-BiLSTM

基于GWO-CNN-BiLSTM数据回归预测(多输入单输出)-灰狼优化算法优化CNN-BiLSTM 1.数据均为Excel数据&#xff0c;直接替换数据就可以运行程序。 2.所有程序都经过验证&#xff0c;保证程序可以运行。 3.具有良好的编程习惯&#xff0c;程序均包含简要注释。 获取方式 https:/…

Pandas 基础 —— 探索数据分析的第一步

引言 在数据科学的世界中&#xff0c;Pandas 以其强大的数据处理能力而成为分析工作的核心工具。本文将引导你走进 Pandas 的大门&#xff0c;从基础概念到数据清洗的实用技巧&#xff0c;为你的数据分析之路打下坚实的基础。 Pandas 简介 Pandas 是一个开源的 Python 数据分…

筛选Github上的一些优质项目

每个项目旁都有标签说明其特点&#xff0c;如今日热捧、多模态、收入生成、机器人、大型语言模型等。 项目涵盖了不同的编程语言和领域&#xff0c;包括人工智能、语言模型、网页数据采集、聊天机器人、语音合成、AI 代理工具集、语音转录、大型语言模型、DevOps、本地文件共享…

p2p、分布式,区块链笔记:libp2p通过libp2p_demo::network实现文件传递功能

代码 代码来自github开源项目file-sharing.rs。主要依赖clap库进行命令行参数解析&#xff0c;使用async_std进行并行操作&#xff0c;使用libp2p_demo::network中的相关方法进行网络建立与文件传输&#xff0c;但是代码量却减少了很多&#xff0c;这是由于libp2p_demo::netwo…

Matplotlib 学习

知识点 1.plot()&#xff1a;用于绘制线图和 散点图scatter() 函数&#xff1a;plot() 函数可以接受许多可选参数&#xff0c;用于控制图形的外观&#xff0c;例如&#xff1a;颜色: colorblue 控制线条的颜色。线型: linestyle-- 控制线条的样式&#xff0c;例如虚线。标记…

YoloV8改进策略:Block改进|轻量实时的重参数结构|最新改进|即插即用(全网首发)

摘要 本文使用重参数的Block替换YoloV8中的Bottleneck&#xff0c;GFLOPs从165降到了116&#xff0c;降低了三分之一&#xff1b;同时&#xff0c;map50-95从0.937涨到了0.947。 改进方法简单&#xff0c;只做简单的替换就行&#xff0c;即插即用&#xff0c;非常推荐&#xf…

C++_STL---list

list的相关介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 list的底层是带头双向循环链表结构&#xff0c;链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向其前一个元素和后一个元素。…

IDEA与通义灵码的智能编程之旅

1 概述 本文主要介绍在IDEA中如何安装和使用通义灵码来助力软件编程,从而提高编程效率,创造更大的个人同企业价值。 2 安装通义灵码 2.1 打开IDEA插件市场 点击IDEA的设置按钮,下拉选择Plugins,如下: 2.2 搜索通义灵码 在搜索框中输入“通义灵码”,如下: 2.3 安…

C语言 二分法求方程根

用二分法求下面方程在&#xff08;-10&#xff0c;10&#xff09;的根。 2x^3-4x^23x-60 这个程序使用二分法求方程 2x^3 - 4x^2 3x - 6 0 在区间 (-10, 10) 内的根。 #include <stdio.h> #include <math.h>// 方程 f(x) double f(double x) {return 2 * pow(x…

使用ifconfig命令获取当前服务器的内网IP地址

如何使用ifconfig命令获取当前服务器的内网IP地址呢&#xff1f; ifconfig eth0 | grep inet | awk {print $2}

什么是五级流水?银行眼中的“好流水”,到底是什么样的?

无论是按揭买房还是日常贷款&#xff0c;银行流水都是绕不开的一环。规划好你的流水&#xff0c;不仅能让你在申请贷款时更有底气&#xff0c;还可能帮你省下不少冤枉钱。今天&#xff0c;咱们就来一场深度剖析&#xff0c;聊聊如何在按揭贷款、个人经营抵押贷款前&#xff0c;…

相关向量机(Relevance Vector Machine,RVM)及Python和MATLAB实现

**相关向量机&#xff08;Relevance Vector Machine&#xff0c;RVM&#xff09;** 是一种基于贝叶斯框架的机器学习模型&#xff0c;于2001年由Michael Tipping提出。RVM是一种稀疏建模技术&#xff0c;类似于支持向量机&#xff08;SVM&#xff09;&#xff0c;但其重点在于自…