Qt界面设计时使各控件依据窗口缩放进行自适应填充的方法——使用布局、Spacer等控件

news2024/11/18 10:38:25

Qt界面设计时使各控件依据窗口缩放进行自适应填充的方法—使用布局、Spacer等控件

  • Chapter1 Qt界面设计时使各控件依据窗口缩放进行自适应填充的方法—使用布局、Spacer等控件
  • Chapter2 Qt Creator中布局器详解
    • 01. 概述
    • 02. 开发环境
    • 03. 布局器概述
    • 04. 布局属性设置
    • 05. 弹簧条属性和作用
  • Chapter3 qtcreator使用(四):布局管理系统
    • 4.0 本章介绍
    • 4.1 布局管理系统
      • 4.1.1 布局管理器
      • 4.1.2 设置部件大小
      • 4.1.3 可扩展窗口
      • 4.1.4 分裂器(QSplitter)
    • 4.2 设置伙伴(buddy)
    • 4.3 设置Tab键顺序
    • 4.4 Qt Creator中的定位器
    • 4.5 小结
  • Chapter4 qtcreator自适应页面布局
    • 一定要注意的地方:


如果希望窗体的某个组件大小在改变窗口大小时不变,需要设置组件的SizePolicy属性和MinimumSize,MaximumSize属性。
在这里插入图片描述
而需要随窗体大小变化的组件属性设置为:
在这里插入图片描述

Chapter1 Qt界面设计时使各控件依据窗口缩放进行自适应填充的方法—使用布局、Spacer等控件

原文链接

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

Chapter2 Qt Creator中布局器详解

原文链接:https://blog.csdn.net/dengjin20104042056/article/details/115329768

01. 概述

关于 Qt 布局管理,有专门的帮助文档页面Layout Management。本章的主要内容就是介绍布局管理的知识,Qt 设计师里面不仅有布局器的控件可以拖动使用,还可以在窗体里面选择控件,然后点击设计师上面的工具按钮自动添加布局器。本节首先大致介绍一下 Qt 设计师里面关于布局器的操作界面。

Qt 的窗口主要内容包括: 布局的样式 , 基于UI界面设置布局 , 基于API设置布局。

Qt 窗口布局是指将多个子窗口按照某种排列方式将其全部展示到对应的父窗口中的一种处理方式。在 Qt 中常用的布局样式有三种,分别是:
在这里插入图片描述

02. 开发环境

Windows系统:Windows10

Qt版本:Qt5.1x或者Qt6

03. 布局器概述

在这里插入图片描述
在设计师和QtCreator中左边列表,可以看到 Layouts 栏目里有四个布局器:
◆ 垂直布局器 QVBoxLayout:将内部的控件按照垂直方向排布,一行一个。
◆ 水平布局器 QHBoxLayout:将内部的控件按照水平方向排布,一列一个。
◆ 网格布局器 QGridLayout:按照多行、多列的网格排布内部控件,单个控件可以占一个格子或者占据连续多个格子。
◆ 表单布局器 QFormLayout:Qt 设计师里把这个布局器称为窗体布局器,窗体布局器这个叫法不准。这个布局器就是对应网页设计的表单,通常用于接收用户输入。该布局器就如它的图标一样,就是固定的两列控 件,第一列通常是标签,第二列是输入控件或含有输入控件的布局器。
◆ Qt 另外还有一个堆栈布局器 QStackedLayout,通常用于容纳多个子窗口布局,每次只显示其中一个。这个布局器隐含在堆栈部件 QStackedWidget 内部,一般直接用 QStackedWidget 就行了,不需要专门设置堆栈布局器。堆栈部件和堆栈布局器留到后面容器类控件的 章节讲解。

与布局紧密关联的是两个空白条(或叫弹簧条):Horizontal Spacer 水平空白条和 Vertical Spacer 垂直空白条,空白条的作用就是填充无用的空隙,如果不希望看到控件拉伸后变丑,就可以塞一个空白条到布局器里面,布局器通常会优先拉伸空白条。两种空白条的类名都是 QSpacerItem,两种空白条只是默认的拉伸方向不一样。

对界面进行布局有两种方式,第一种方式是预先设计好整体布局,先拖入布局器,后拖入功能控件到布局器里面,这种方式不太方便,因为脑海里得提前做好布局规划。第二种方式才是是最常用的,先把所有功能控件拖入主界面,然后根据设置好的功能控件来决定如何进行布局。Qt 的布局器中既可以添加普通功能控件,也可以添加其他布局器,所以布局器的使用是非常灵活的。界面里的控件,可以先按行排列布局,再按列排列布局;或者反过来,先排好列,再 排好行;当然也可以直接用网格布局器或表单布局器。可以按实际控件的关系和用户喜好进行布局。

Qt 设计师和Qt Creator左边列的四个布局器,其实不是经常需要拖动它们到主界面,更为常见的操作是选中控件,然后点击设计师上面布局工具栏里的快捷按钮实现布局,这些快捷按钮的功能更丰 富,也更常用。布局工具栏有 8 个按钮,下面依次介绍:
① 将选中控件添加到水平布局器排列。
② 将选中控件添加到垂直布局器排列。
③ 将选中控件添加到水平分裂器排列。
④ 将选中控件添加到垂直分裂器排列。
⑤ 将选中控件添加到网格布局器排布,行列的数目不限。
⑥ 将选中控件添加到表单布局器排布,该布局器固定为两列控件。
⑦ 打破布局,即保留布局器内部的控件和子布局,消除当前选中的布局器。
⑧ 根据需要显示的内容,自动调整控件或窗体的尺寸,相当于调用一次 adjustSize() 函数。

【温馨提示】

这里需要说明一下,布局器和空白条的基类其实都是 QLayoutItem,布局器仅用于辅助功能,帮助自动调整窗口里的控件布局,并不是实体控件,没有 show() 之类的显示函数,不能单独存在,必须要有实体控件才能设置布局器。
我们之前介绍的都是实体控件,基类都是 QWidget ,都可以单独存在,有 show() 之类的显示函数。
分裂器具有布局功能,但分裂器的基类是 QFrame,分裂器是一个实体控件,分裂器不同于布局器。

04. 布局属性设置

当我们给窗口设置了布局之后,选中当前窗口,就可以看到在其对应的属性窗口中除了有窗口属性,还有一个布局属性,下面给大家介绍一下这些属性:
在这里插入图片描述

通过设置布局上下左右的边距,或者是控件之间的距离也可以使界面看起来更加美观。

05. 弹簧条属性和作用

在进行窗口布局的时候为了让界面看起来更加美观,需要调整控件的位置,比如:靠左,靠右,居中,又或者我们需要调节两个控件之间的距离,以上这些需求使用弹簧都是可以实现的。

关于弹簧的 sizeType 属性,有很多选项,一般常用的只有两个:

  • Fixed: 得到一个固定大小的弹簧
  • Expanding: 得到一个可伸缩的弹簧,默认弹簧撑到最大
    在这里插入图片描述

Chapter3 qtcreator使用(四):布局管理系统

原文链接:https://blog.csdn.net/qq_41694024/article/details/125643062

4.0 本章介绍

第3章讲述了一些窗口部件,当时往界面上拖放部件时都是随意放置的,这对于学习部件的使用没有太大的影响,但是,对于一个完善的软件,布局管理却是必不可少的。无论是想要界面中的部件有一个整齐的排列,还是想要界面能适应窗口的大小变化,都要进行布局管理。

Qt主要提供了QLayout类及其子类来作为布局管理器,它们可以实现常用的布局管理功能,QLayout及其子类的关系如下图所示。本章还会涉及Buddy 、Tab键顺序设置等内容。
在这里插入图片描述

4.1 布局管理系统

Qt的布局管理系统提供了强大的机制来自动排列窗口中的所有部件,确保它们有效地使用空间。

Qt包含了一组布局管理类,从而在应用程序的用户界面中对部件进行布局,比如 QLayout的几个子类,这里将它们称作布局管理器。所有QWidget的子类的实例(对象)都可以使用布局管理器管理位于它们之中的子部件,QWidget : ; setLayout()函数可以在一个部件上应用布局管理器。一旦一个部件上设置了布局管理器,那么它会完成以下几种任务:

1.定位子部件;
2.感知窗口默认大小;

3.感知窗口最小大小;
4.窗口大小变化时进行处理;

5.当内容改变时自动更新;
字体大小、文本或子部件的其他内容随之改变;

隐藏或显示子部件;
移除一个子部件。

下面将在具体例子中讲解布局管理器的这些功能,本节主要讲述QLayout类的几个子类,最后会涉及QSplitter类,它也可以作为一种布局管理器。本节内容可以在帮助索引中通过Layout Management关键字查看。

4.1.1 布局管理器

QLayout类是布局管理器的基类,是一个抽象基类,继承自QObject和 QLayoutItem类,QLayoutItem类提供了一个供QLayout操作的抽象项目。QLayout 和QLayoutItem都是在设计自己的布局管理器时才使用的,一般只需要使用QLayout的几个子类即可,它们分别是QBoxLayout(基本布局管理器)、QGridLayout(栅格布局管理器)、QFormLayout(窗体布局管理器)和QStackedLayout(栈布局管理器)。这里的QStackedLayout与第3章讲述的栈部件QStacked Widget用法相同,不再赘述。

下面先来看一个例子。打开Qt Creator,新建Qt Widgets应用,项目名称为mylayout,基类选择QWidget,类名设为MyWidget。完成后打开 mywidget. ui文件,在设计模式中向界面上拖入一个字体选择框Font Combo Box和一个文本编辑器Text Edit部件。

然后单击主界面并按下Ctrl+L快捷键,或者单击设计器上部边栏中的目图标来对主界面进行垂直布局管理。也可以在主界面上右击如下图:
在这里插入图片描述
在弹出的级联菜单中选择“布局→垂直布局”。这样便设置了顶层布局管理器(因为是对整个窗口设置的布局管理器,所以叫顶层布局管理器),可以看到两个部件已经填满了整个界面。这时运行程序,然后拉伸窗口,两个部件会随着窗口的大小变化而变化,如下图所示。这就是布局管理器的作用。
在这里插入图片描述
1.基本布局管理器
基本布局管理器QBoxLayout类可以使子部件在水平方向或者垂直方向排成一列,它将所有的空间分成一行盒子,然后将每个部件放入一个盒子中。

它有两个子类QHBoxLayout水平布局管理器和QVBoxLayout垂直布局管理器,编程中经常用到。再回到设计模式中看看布局管理器的属性。先单击主界面,查看它的属性栏,最后面的部分是其使用的布局管理器的属性,如下表所列。

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

下面打破已有的布局,使用代码实现水平布局。在界面上右击,然后在弹出的级联菜单中选择“打破布局”,或者单击设计器上方边栏中的打破布局图标。在 mywidget.cpp文件中添加头文件#include < QHBoxLayout >,并在 MyWidget类的构造函数中添加如下代码:

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MyWidget)
{
    ui->setupUi(this);
    //新建水平布局管理器
    QHBoxLayout * layout = new QHBoxLayout;
    //向布局管理器中添加部件
    layout -> addWidget(ui -> fontComboBox);
    layout -> addWidget(ui -> textEdit);
    //设置部件间的间隔
    layout -> setSpacing(50);
    //设置布局管理器到边界的距离 左上右下
    layout -> setContentsMargins(0,0,50,100);
    //将这个布局设置为MyWidget类的布局
    setLayout(layout);
}

在这里插入图片描述
这里使用了addWidget()函数向布局管理器的末尾添加部件,还有一个insertWidget()函数可以实现向指定位置添加部件,它比前者更灵活。前面使用的垂直布局管理器也可以通过相似的代码来实现。

2.栅格布局管理器(QGridLayout)

栅格布局管理器QGridLayout类使部件在网格中进行布局,它将所有的空间分隔成一些行和列,行和列的交叉处形成了单元格,然后将部件放入一个确定的单元格中。

先往界面上拖放一个Push Button,然后在mywidget. cpp中添加头文件#include< QGridLayout >,再注释掉前面添加的关于水平布局管理器的代码,添加的如下代码:

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MyWidget)
{
    ui->setupUi(this);
//    //新建水平布局管理器
//    QHBoxLayout * layout = new QHBoxLayout;
//    //向布局管理器中添加部件
//    layout -> addWidget(ui -> fontComboBox);
//    layout -> addWidget(ui -> textEdit);
//    //设置部件间的间隔
//    layout -> setSpacing(50);
//    //设置布局管理器到边界的距离 左上右下
//    layout -> setContentsMargins(0,0,50,100);
//    //将这个布局设置为MyWidget类的布局
//    setLayout(layout);
    QGridLayout * layout = new QGridLayout;
    //添加部件,从第0行0列开始,占据一行二列
    layout -> addWidget(ui->fontComboBox,0,0,1,2);
    //添加部件,从第0行2列开始,占据一行一列
    layout -> addWidget(ui->pushButton,0,2,1,1);
    //添加部件,从第1行0列开始,占据一行三列
    layout -> setSpacing(50);
    layout -> addWidget(ui->textEdit,1,0,1,3);
    setLayout(layout);
}

这里主要是设置部件在栅格布局管理器中的位置,将fontComboBox部件设置为占据1行2列,而pushButton部件占据1行1列,这主要是为了将fontComboBox部件和 pushButton部件的长度设置为2:1。这样一来, textEdit部件要想占满剩下的空间,就要使它的跨度为3列。

这里需要说明,当部件加入到一个布局管理器中,然后将这个布局管理器再放到一个窗口部件上时,这个布局管理器以及它包含的所有部件都会自动重新定义自己的父对象( parent)为这个窗口部件,所以在创建布局管理器和其中的部件时并不用指定父部件。此外,也可以直接在设计模式时使用前面讲过的方法来使用栅格布局管理器。
在这里插入图片描述
3.窗体布局管理器(QFormLayout)

窗体布局管理器QFormLayout类用来管理表单的输入部件以及与它们相关的标签。窗体布局管理器将它的子部件分为两列,左边是一些标签,右边是一些输入部件,比如行编辑器或者数字选择框等。

其实,如果只是起到这样的布局作用,那么用QGridLayout就完全可以做到了,之所以添加QFormLayout类,是因为它有独特的功能。下面看一个例子。

先将前面在MyWidget类的构造函数中自己添加的代码全部注释掉,然后进入设计模式,这里使用另外一种方法来使用布局管理器。从部件栏中找到Form Layout,将其拖入到界面上,然后双击或者在它上面右击并在弹出级联菜单中选择“添加窗体布局行”。在弹出的“添加表单布局行”对话框中填入标签文字“姓名(&N):”,这样下面便自动填写了“标签名称”,“字段类型”和“字段名称”等,并且设置了伙伴关系。这里使用了QLineEdit行编辑器,当然也可以选择其他部件。填写的标签文字中的“(&N)”必须是英语半角的括号,表明它的快捷键是Alt+N。设置伙伴关系表示按下Alt+N时,光标自动跳转到标签后面对应的行编辑器中。单击“确定”键,则会在布局管理器中添加一个标签和一个行编辑器。按照这种方法,再添加3行:性别(&S),使用QComoBox;年龄(&A),使用QSpinBox;邮箱(&M),使用QLineEdit。完成后运行程序,可以按下快捷键Alt+N,这样光标就可以定位到“姓名”标签后的行编辑器中。
在这里插入图片描述
上面添加表单行是在设计器中完成的,其实也可以在代码中使用addRow()函数来完成。窗体布局管理器为设计表单窗口提供了多方面的支持,其实它还有一些实用的特性,这个放到下一节再讲。窗体管理器也可以像普通管理器一样使用,但是,如果不是为了设计这样的表单,一般会使用栅格布局管理器。

4.综合使用布局管理器

前面讲到了3种布局管理器,真正使用时一般是将它们综合起来应用。现在将前面的界面再进行设计:按下Ctrl键的同时选中界面上的字体选择框fontComboBox和按钮pushButton,然后按下Ctrl+H快捷键将它们放入一个水平布局管理器中(其实也可以从部件栏中拖入一个 Horizontal Layout,然后再将这两个部件放进去,效果是一样的)。

然后再从部件栏中拖入一个Vertical Spacer垂直分隔符,用来在部件间产生间隔,将它放在窗体布局管理器与水平布局管理器之间。

最后单击主界面并按下Ctrl+L快捷键,让整个界面处于一个垂直布局管理器中。

这时可以在右上角的对象列表中选择分隔符Spacer,然后在属性栏中设置它的高度为100,如下图所示。这时运行程序可以看到,分隔符是不显示的。
在这里插入图片描述
这里综合使用了窗体布局管理器,水平布局管理器和垂直布局管理器,其中,垂直布局管理器是顶级布局管理器,因为它是主界面的布局,其他两个布局管理器都包含在它里面。

如果要使用代码来实现将一个子布局管理器放入一个父布局管理器之中,则可以使用父布局管理器的addLayout()函数。

在这里插入图片描述

4.1.2 设置部件大小

讲解之前要先了解两个概念:大小提示(sizeHint)和最小大小提示(minimumSizeHint)。凡是继承自QWidget的类都有这两个属性,其中,sizeHint属性保存了部件的建议大小,对于不同的部件,默认拥有不同的sizeHint;

而 minimumSizeHint保存了一个建议的最小大小提示。可以在程序中使用sizeHint()函数来获取sizeHint的值,使用minimumSizeHint()函数获取 minimumSizeHint的值。需要说明的是,如果使用setMinimumSize()函数设置了部件的最小大小,那么最小大小提示将会被忽略。这两个属性在使用布局时起到了很重要的作用。

下面再来看一下大小策略(sizePolicy)属性,它也是QWidget类的属性。这个属性保存了部件的默认布局行为,在水平和垂直两个方向分别起作用,控制着部件在布局管理器中的大小变化行为。sizePolicy属性的所有取值如下表所列。

在这里插入图片描述可以看到,大小策略与sizeHint()的值息息相关。对于布局管理器来说,大小策略对于布局效果也起到了很重要的作用。

下面来看一下它们的效果。还在前面的程序中进行操作。单击界面上那个分隔符Spacer,当时将其属性中的sizeHint的高度设置为100,可是实际界面上的分隔符高度并没有到达100。这时可以看到它的sizeType属性设置为Expanding,如果将它更改为Fixed,这样界面上的分隔符马上增高了,现在它的实际高度才是sizeHint的高度值。

在这里插入图片描述
下面再来了解一下伸缩因子(stretch factor)的概念。前面讲垂直布局管理器时曾提到过它,其实它是用来设置部件间比例的。

界面上的字体选择框和一个按钮处于一个水平布局管理器中,现在想让它们的宽度比例为2:1 ,那么就可以单击对象栏中的horizontalLayout水平布局管理器对象,然后在它的属性栏中将layoutStretch属性设置为“2,1”,这样这个水平布局管理器中的两个部件的宽度就是2:1的比例了。如果要在代码中进行设置,则可以在使用布局管理器的addWidget()函数添加部件的同时,在第二个参数中指定伸缩因子。

在这里插入图片描述
现在再来看一下窗体布局管理器中的一些属性。单击对象栏中的formLayout,其属性栏中几个属性的说明如下表所列。
在这里插入图片描述

在这里插入图片描述
对于layoutFieldGrowthPolicy属性,这里选择ExpandingFieldsGrow选项,这样性别和年龄两个输入框就没有那么宽了,更符合美观要求。然后将界面中的“邮箱”标签更改为“邮箱地址”,在 layoutLabelAlignment属性中选择AlignRight。

在这里插入图片描述
下面来看一下QWidget类及其子类部件的设置大小的相关属性。单击主界面,查看一下其属性栏,其最开始便是几个与大小有关的属性。这里的高度与宽度属性是现在界面的大小;下面的sizePolicy属性可以设置大小策略以及伸缩因子; minimumSize属性用来设置最小值,这里改为200×150;maximumSize属性设置最大值,将其设置为500×350 ;sizeIncrement属性和 baseSize属性是设置窗口改变大小的,一般不用设置。
在这里插入图片描述
最后看一下布局管理器的 layoutSizeConstraint属性,它是用来约束窗口大小的,也就是说,这个只对顶级布局管理器有用,因为它只对窗口有用,对其他子部件没有效果。它的几个值及其含义如表所列。这个属性的默认值是SetDefaultConstraint。可以将界面的顶级布局管理器设置为SetFixedSize,这样运行程序可以看到,窗口就无法再变化大小了。

在这里插入图片描述

4.1.3 可扩展窗口

一个窗口可能有很多选项是扩充的,只有在必要的时候才显示出来,这时就可以使用一个按钮来隐藏或者显示多余的内容,就是所谓的可扩展窗口。要实现可扩展窗口,就要得力于布局管理器的特性,那就是当子部件隐藏时,布局管理器自动缩小,当子部件重新显示时,布局管理器再次放大。下面看一个具体的例子。

依然在前面的程序中进行更改。首先将界面上的 pushButton显示文本更改为“显示可扩展窗口”,并在其属性栏选中 checkable选项。
在这里插入图片描述
然后转到它的 toggled(bool)信号的槽,更改如下:

void MyWidget::on_pushButton_2_toggled(bool checked)
{
    //设置文本编辑器的显示和隐藏
    ui -> textEdit -> setVisible(checked);
    if(checked)
    {
        ui -> pushButton_2 -> setText("隐藏可拓展窗口");
    }
    else
    {
        ui -> pushButton_2 -> setText("显示可拓展窗口");
    }
}

这里使用按钮的按下与否两种状态来设置文本编辑器是否显示,并且相应地更改按钮的文本。为了让文本编辑器在一开始是隐藏的,还要在 MyWidget类的构造函数中添加一行代码:

ui->textEdit->hide();

这时运行程序。可扩展窗口隐藏时效果如下图所示,可扩展窗口显示时如下图所示。也可以参考Qt自带的示例程序Extension Example。
在这里插入图片描述
在这里插入图片描述

4.1.4 分裂器(QSplitter)

分裂器QSplitter类提供了一个分裂器部件。和QBoxLayout类似,可以完成布局管理器的功能,但是包含在它里面的部件,默认是可以随着分裂器的大小变化而变化的。比如一个按钮放在布局管理器中,它的垂直方向默认是不会被拉伸的,但是放到分裂器中就可以被拉伸。还有一点不同就是,布局管理器继承自QObject类,而分裂器却是继承自QFrame类,QFrame类又继承自QWidget类,也就是说,分裂器拥有QWid-get类的特性,它是可见的,而且可以像QFrame一样设置边框。

新建Qt Widgets应用,项目名称为mysplitter,基类选择QWidget,类名设为MyWidget。建好项目后打开mywidget.ui 文件,然后往界面上拖入4个Push Button,同时选中这4个按钮,右击并在弹出的级联菜单中选择“布局→使用分裂器水平布局”,将这4个按钮放到一个分裂器中。将分裂器拉大点,并在属性栏中设置其frameShape为 Box,frameShadow为Raised,lineWidth为5。此时运行程序,效果如下图所示。
在这里插入图片描述

4.2 设置伙伴(buddy)

前面讲述窗体布局管理器时提到了设置一个标签和一个部件的伙伴关系。其实,伙伴(buddy)是在QLabel类中提出的一个概念。因为一个标签经常用作一个交互式部件的说明,就像在讲窗体布局管理器时看到的那样,一个 lineEdit部件前面有一个标签说明这个lineEdit的作用。为了方便定位,QLabel提供了一个有用的机制,那就是提供了助记符来定位键盘焦点到对应的部件上,而这个部件就叫这个QLabel 的伙伴。其中,助记符就是我们所说的加速键。使用英文标签时,在字符串的一个字母前面添加“8.”符号,就可以指定这个标签的加速键是Alt加上这个字母;对于中文,需要在小括号中指定加速键字母,这个前面已经见过多次了。Qt设计器中也提供了伙伴设计模式,下面看一个例子。

新建Qt Widgets应用,项目名称为mybuddy ,基类选择QWidget ,类名设为MyWidget。

完成后打开mywidget.ui 文件,往界面上拖放4个标签Label,再在标签后面依次放上PushButton、 CheckBox、LineEdit和SpinBox。然后将PushButton前面的标签文本改为“&Button:”,CheckBox前面的标签文本改为“C&heckBox:”,LineEdit前面的标签文本改为“行编辑器(&L):”,SpinBox前面的标签文本改为“数字选择框(&N):”。

单击设计器上方边栏中的伙伴图标进入伙伴设计模式。
在这里插入图片描述
分别将各个标签与它们后面的部件关联起来,如下图所示。然后按下F3键回到正常编辑模式,可以看到所有的&符号都不显示了。
在这里插入图片描述

现在运行程序,按下Alt+B组合键,则可以看到按钮被按下了,而字母下面多了一个横杠,表示这个标签的加速键就是Alt加这个字母。如果要在代码中设置伙伴关系,则只需要使用QLabel的 setBuddy()函数就可以了。本小节内容可以在帮助索引中通过Qt Designer’s Buddy Editing Mode关键字查看。
在这里插入图片描述

4.3 设置Tab键顺序

对于一个应用程序,有时总希望使用Tab键将焦点从一个部件移动到下一个部件。在设计模式中,设计器提供了Tab键的设置功能。

在前面程序的设计模式中,按下上方边栏的编辑Tab顺序国按钮进入编辑Tab键顺序模式,这时已经显示出了各个部件的Tab键顺序,只需要单击这些数字就可以更改顺序。设置好之后,可以运行一下程序测试效果。需要说明,当程序启动时,焦点会在 Tab键顺序为1的部件上。
在这里插入图片描述
关于在设计器中设置Tab键顺序,也可以在帮助索引中通过Qt Designer’s TabOrder Editing Mode关键字查看。

4.4 Qt Creator中的定位器

第1章中介绍Qt Creator时已经提到了定位器,它位于主界面的左下方。使用定位器可以很方便地打开指定文件、定位到文档的指定行、打开一个特定的帮助文档、进行项目中函数的查找等。更多的功能可以在帮助索引中通过Searching With the Locator关键字查看。

定位器中提供了多个过滤器来实现不同的功能,按下Ctrl+K快捷键就会在定位器中显示各个过滤器的前缀及其功能,如下图所示。使用方法是“前缀符号+空格+要定位的内容”。
在这里插入图片描述
下面举两个简单的例子。在Qt Creator中,按下Ctrl+K快捷键打开定位器,这时
输人“1 8"(英文字母1和一个空格,然后是数字8),按下Enter回车键,就会跳转到编辑
模式的当前打开文档的第8行。

再次按下Ctrl + K快捷键,输入“? qla" ,这时已经查
找到了QLabel,按下回车键,就会跳转到帮助模式中,并打开QLabel类的帮助文档。

4.5 小结

这一章讲述了一些关于界面布局的知识,其实只是提到了最基本的应用,更多的布局知识还要参考帮助文档。以后的章节还是以讲解知识点为主,所以对界面的布局操作不会涉及太多。但是这并不表明布局不重要,对于一个软件,良好的布局是必须的。

Chapter4 qtcreator自适应页面布局

原文链接

一定要注意的地方:

1.mainwindow一定要布局,不然页面无法自适应大小。
未布局mainwindow:会有这个禁止符号,在空白的地方右键布局(根据需要选择)这样就能让布局铺满mainwindow实现整个窗口的布局,即自适应布局。
在这里插入图片描述
在这里插入图片描述
一般的布局方式就两种,一种水平,一种垂直,就是字面意思。把我们的元件按照想要的顺序位置排布。这个很简单。
神器:弹簧。
在这里插入图片描述
就是这两个弹簧,它的作用是控制布局的整体比例。比如我这个单位只有极个别的行有,那么就可以用弹簧填充空出来的部分(弹簧可以理解为空格,不显示出来的)在右上角的布局里可以设置比例,比如我这里就是将那一列设置为4(弹簧):1:1:1:3(弹簧):1:1:4(弹簧)
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

简单版本管理服务编写

说明: 制作android应用内更新的时候&#xff0c;经常会用到版本检查&#xff0c;下载&#xff0c;安装&#xff0c;这时候需要写一个版本管理服务。 本文说明了自己编写版本服务的简单经过。 解决方案: 该软件实现如下功能&#xff1a; 创建后台接口&#xff1a;版本软件上传…

基于PHP的设云尘资讯网站设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

保姆级自定义GPTs教程,无需任何代码!

11月10日&#xff0c;OpenAI正式宣布向所有ChatGPT Plus用户开放GPTs功能&#xff0c;一个人人都能开发自定义ChatGPT助手的时代降临。 GPTs支持无代码、可视化点击操作&#xff0c;这意味着即便你没有任何编程经验&#xff0c;只要有数据、脑洞大开的想法&#xff0c;就能开发…

探索微信小程序框架的精华——高质量的优秀选择

目录 引言&#xff1a; 1. 框架性能 2. 开发者工具支持 3. 文档和社区支持 4. 扩展能力 5. 使用率和稳定性 结语&#xff1a; 引言&#xff1a; 微信小程序作为一种轻量级、高效便捷的应用形式&#xff0c;已经在移动应用领域占据了重要地位。而其中&#xff0c;选择一个…

PostMan授权认证使用

Authorization 对于很多应用&#xff0c;出于安全考虑我们的接口并不希望对外公开。这个时候就需要使用授权(Authorization)机制。 授权过程验证您是否具有访问服务器所需数据的权限。 当发送请求时&#xff0c;通常必须包含参数&#xff0c;以确保请求具有访问和返回所需数据…

C/C++数据结构之链表题目答案与解析

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂。 目录 1.前言 2.题目…

C++学习笔记(二):C++是如何运行的

C是如何运行的 include 预处理语句&#xff0c;在编译前就会被处理。 main函数 程序入口。 #include <iostream>int main() {std::cout << "Hello World!" << std::endl;std::cin.get();return 0; }Visual Studio 解决方案平台指的是编译的代码的…

从零开始开发抖音小程序:与餐饮团购的完美融合

本文将探讨如何从零开始开发一个创新的抖音小程序&#xff0c;以其独特的特性与餐饮团购进行完美融合。 一、什么是抖音小程序&#xff1f; 抖音小程序为开发者提供了在用户观看视频时进行无缝体验的机会。通过借助抖音的庞大用户基础&#xff0c;开发者可以将自己的创意呈现给…

python3GUI--QQ音乐By:PyQt5(附下载地址)

文章目录 一&#xff0e;前言二&#xff0e;展示0.播放页1.主界面1.精选2.有声电台3.排行4.歌手5.歌单 2.推荐3.视频1.视频2.分类3.视频分类 4.雷达5.我喜欢1.歌曲2.歌手 6.本地&下载7.最近播放8.歌单1.一般歌单2.自建歌单3.排行榜 9.其他1.搜索词推荐2.搜索结果 三&#x…

Vuex持久化插件

Vuex数据默认是存储在内存中的&#xff0c;当然我们也可以将它存储在Local Storage&#xff0c;也可以指定某些数据存储在Local Storage 这样我们就用到了Vuex持久化插件vuex-persistedstate 安装vuex-persistedstate插件 npm install vuex-persistedstate --save 案列&#x…

数据管理系统-week1-文件系统、数据库和数据库管理系统

文章目录 前言一、 文件系统文件系统的限制 二、 数据库系统三、 数据库管理系统参考文献 前言 一、 文件系统 对于更高级的数据处理应用程序来说&#xff0c;基于数据块的持久存储逻辑模型过于简单数据块序列被划分为称为文件的数据块的可变子序列&#xff0c;与文件相关的名…

【ATTCK】MITRE Caldera -引导规划器

一、Caldera 概念 在详细介绍新的引导式规划器之前&#xff0c;我们先回顾一下与 Caldera 相关的概念的一些定义。 能力是 Caldera 可以执行的最小原子动作。对手由一组能力组成。例如&#xff0c;旨在发现和泄露感兴趣的文件的对手可能具有发现文件、创建暂存目录、将发现的文…

养老院信息展示预约小程序的效果如何

老龄化速度加快及快节奏时代&#xff0c;银发群体的老年生活&#xff0c;儿女往往难以照顾&#xff0c;养老院成为不少家庭或个人的选择&#xff0c;靠谱机构往往能带给老人丰富多彩的生活。 而在高需求的同时&#xff0c;无论对需求者还是养老院本身都存在一定难题&#xff1…

【Mysql】next-key 锁范围

背景 Mysql RR场景下通过next-key 锁解决了幻读的问题&#xff0c;而幻读通常是由 insert 新增的数据导致。所以next-key锁最终通过锁机制防止了一定条件下的新增数据从而解决了幻读问题。 规律 next-key锁可以由以下几条规律总结出锁范围 next-key会对查询过程中访问到的对…

灵活用工仿boss直聘招聘系统劳务系统源码

灵活用工仿boss直聘招聘系统劳务系统 开发语言&#xff1a; 后台&#xff1a;phpmysql&#xff0c;fastadmin框架 前端&#xff1a;vue&#xff0c;Uniapp 功能介绍&#xff1a; 1.登录 账号密码登录&#xff0c;微信手机号授权登录 2.首页&#xff1a;定位功能&#xf…

前端和空字符串、零比较时请务必使用===

在前端开发中遇到一个问题&#xff0c;以下两条语句的结果都是true。 console.log(0 ""); console.log(false ""); 这就导致了editingId为0的时候&#xff0c;if分支并没有执行&#xff0c;而我的本意是当editingId不是空也不是空字符串的时候执行分支…

实战Leetcode(三)

Practice makes perfect&#xff01; 实战一&#xff1a; 带环问题其实我们小学时就接触过&#xff0c;就比如在操场上比赛跑步的追击问题&#xff0c;这里也是一样&#xff0c;如果我们定义两个指针&#xff0c;一个快指针&#xff0c;一个慢指针&#xff0c;快指针走的快&…

SQL 算数函数

AVG() 求数值列的平均值。 具体计算过程&#xff1a;其通过对表中行数计数并计算特定数值列的列值之和&#xff0c;求得该列的平均值。 语法&#xff1a; SELECT AVG(column_name) FROM table_name; 当参数 column_name 列中的数据均为空时&#xff0c;结果会返回 NULL。 …

python实现炒股自动化,个人账户无门槛量化交易的开始

本篇作为系列教程的引子&#xff0c;对股票量化程序化自动交易感兴趣的朋友可以关注我&#xff0c;现在只是个粗略计划&#xff0c;后续会根据需要重新调整&#xff0c;并陆续添加内容。 股票量化程序化自动交易接口 很多人在找股票个人账户实现程序化自动交易的接口&#xff0…