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

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(弹簧)
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VBA_MF系列技术资料1-217

MF系列VBA技术资料 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧&#xff0c;我参考大量的资料&#xff0c;并结合自己的经验总结了这份MF系列VBA技术综合资料&#xff0c;而且开放源码&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-04属于定…

算法通关村第八关-青铜挑战二叉树的经典题目

大家好我是苏麟 , 今天来说二叉树的经典题目 二叉树的双指针 所谓的双指针就是定义了两个变量&#xff0c;在二叉树中有时候也需要至少定义两个变量才能解决问题&#xff0c;这两个指针可能针对一棵树&#xff0c;也可能针对两棵树&#xff0c;我们姑且也称之为“双指针”吧。…

AI通义灵码能够帮你写通达信选股公式么?

答案是否定的 先不说语法错误&#xff0c;注释错误&#xff0c;就说AI压根不理解炸板和涨停板&#xff1b; 算了&#xff0c;股票交易AI千万别来掺和&#xff0c;会死的很惨的。

Linux C/C++ 入侵检测系统(IDS绕过技巧)

入侵检测系统&#xff08;IDS&#xff09;是一种网络安全设备&#xff0c;其主要功能是对网络传输进行即时监视&#xff0c;并在入侵检测系统&#xff08;IDS&#xff09;是一种网络安全设备&#xff0c;其主要功能是对网络传输进行即时监视&#xff0c;并在发现可疑传输时发出…

python升级pip的时候一直失败

如图,一直提示使用 python.exe -m pip install --upgrade pip 进行升级pip,但是执行这句命令又不成功.然后综合了几篇文章以后使用了下面的命令可以升级了 python -m pip install --upgrade pip --user -i https://mirrors.aliyun.com/pypi/simple/ 主要是在推荐的语句上使用…

赶紧收藏!阿里内部使用的127页k8s实战手册,不能再详细了!

2022 年 12 月 8 号Kubernetes 发布了1.26新版本&#xff0c;此版本中有两个突出的新功能&#xff0c;它们有可能改变用户与 Kubernetes 交互的方式&#xff0c;此外&#xff0c;其他功能将使集群管理员的工作更轻松。 说起来&#xff0c;Kubernetes从诞生初期就广泛受到业界的…

金字塔原理小节

目录 第1章 为什么要用金字塔结构 一、归类分组&#xff0c;将思想组织成金字塔 二、奇妙的数字“7” 三、归类分组搭建金字塔 四、找出逻辑关系&#xff0c;抽象概括 五、自上而下表达&#xff0c;结论先行 第1章 为什么要用金字塔结构 如果受众希望通过阅读你的文章、听…

玩了个锤子游戏小程序搭建流程:探索深度与逻辑的结合

随着移动互联网的普及&#xff0c;小程序已经成为了越来越多用户的选择。在这个背景下&#xff0c;玩了个锤子游戏小程序应运而生&#xff0c;它为用户提供了一个全新的游戏体验。那么&#xff0c;如何搭建这样一个小程序呢&#xff1f;本文将为大家详细介绍玩了个锤子游戏小程…

WPS数组

一、创建数组方法和数组的读取、修改、写入 数组是值的有序集合&#xff0c;其中的值叫作元素。每个元素有一个数值表示的位置&#xff0c;叫作索引&#xff0c;数组中的不同元素可以是不同数据类型。 function demo(){var arr1[99,"人","abc",[3,4,5]];…

【tgowt】更新thirdparty

更新完毕后是这样的 之前有过构建但是不能用在owt-p2p项目中,会有崩溃? 【tgowt】cmake转ninja vs构建现在好像都更新到108了 submodule比较麻烦 只修改这里的还不行:一旦git submodule init 后,再改这里的似乎晚了?如果能成功clone就有生成 还必须要改这里的 折腾好几次才…

由于找不到 d3dx9_43.dll,无法继续执行代码。重新安装程序可能会解决此问题

电脑出现d3dx9_43.dll缺失的问题&#xff0c;通常是由于DirectX组件未安装或损坏导致的。为了解决这个问题&#xff0c;我为您提供了以下四个解决方法&#xff1a; d3dx9_43.dll解决方法1. 使用dll修复程序修复 首先&#xff0c;使用系统文件程序dll进行修复操作非常简单&…

Python进行多维数据分析

多维数据分析是对数据的信息分析&#xff0c;它考虑了许多关系。让我们来介绍一些使用Python分析多维/多变量数据的基本技术。 从这里找到用于说明的数据的链接。&#xff08;https://archive.ics.uci.edu/dataset/111/zoo&#xff09; 以下代码用于从zoo_data. csv读取2D表格…

Spring Cloud学习(三)【Nacos注册中心】

文章目录 认识 NacosNacos 安装使用 Nacos 完成服务注册Nacos 服务分级存储模型集群负载均衡策略 NacosRule根据权重负载均衡Nacos 环境隔离&#xff08;命名空间&#xff09;Nacos 和 Eureka 的区别 认识 Nacos Nacos 是阿里巴巴的产品&#xff0c;现在是 SpringCloud 中的一…

高频SQL50题(基础版)-3

文章目录 主要内容一.SQL练习题1.1174-即时食物配送代码如下&#xff08;示例&#xff09;: 2.550-游戏玩法分析代码如下&#xff08;示例&#xff09;: 3.2356-每位教师所教授的科目种类的数量代码如下&#xff08;示例&#xff09;: 4.1141-查询近30天活跃用户数代码如下&…

@CreateCache:深度解析其功能与优势

1. CreateCache前言 在现代Web应用程序开发中&#xff0c;缓存是提高性能和响应速度的重要手段之一。CreateCache注解是JetCache框架中用于创建缓存的注解。本文将介绍CreateCache注解以及它在缓存管理中的作用。 2. CreateCache使用示例 以下是使用CreateCache注解的一个简…

计算机组成原理之处理器(单周期)

引言 处理器的实现方式决定了时钟周期长度和CPI。实现方式有单周期与流水线&#xff0c;本篇谈谈单周期处理器。 目前CPU的频率一般是3GHZ/4GHZ&#xff0c;但是频率是有极限值的&#xff0c;受cycletime影响 基本的RISC-V实现 存储指令&#xff1a;ld,sd算术逻辑指令 &…

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…

第四节(2):修改WORD中表格数据的方案

《VBA信息获取与处理》教程(10178984)是我推出第六套教程&#xff0c;目前已经是第一版修订了。这套教程定位于最高级&#xff0c;是学完初级&#xff0c;中级后的教程。这部教程给大家讲解的内容有&#xff1a;跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网…

容器网络-Underlay和Overlay

一、主机网络 前面讲了容器内部网络&#xff0c;但是容器最终是要部署在主机上&#xff0c;跨主机间的网络访问又是怎么样的&#xff0c;跨主机网络主要有两种方案。 二、 Underlay 使用现有底层网络&#xff0c;为每一个容器配置可路由的网络IP。也就是说容器网络和主机网络…