Qt Creator快速入门 第4章 布局管理

合集下载

Qt布局管理器

Qt布局管理器

Qt布局管理器在⼀个颜值当道的今天,⽆论买⾐服,买车还是追星,颜值的⾼低已经变成了⼤家最看重的(不管男性⼥性都⼀样,千万别和我说你不是);⽽对于程序猿来说,开发⼀款软件,不再只注重逻辑和稳定性,美观和⽤户友好性也是我们不得不关注的⼀个重点了。

我们进⼊正题,今天主要和⼤家分享⼀下Qt⽅⾯关于布局管理器的使⽤;⼀、基本概念Qt 提供了⼏种在窗⼝部件上管理⼦窗⼝部件的基本⽅式。

⼀共有3 种⽅法⽤于管理窗体上⼦窗⼝部件的布局:绝对位置法、⼈⼯布局法和布局管理器法。

相⽐于使⽤固定尺⼨和位置,布局提供了功能强⼤且极具灵活性的另⼀种⽅案。

使⽤布局后,编程⼈员⽆需计算尺⼨和位置,布局可以⾃动进⾏调整,符合⽤户屏幕、语⾔以及字体的要求。

1.绝对位置法这种⽅法是最原始的拖放窗⼝部件的⽅法。

它对窗体的各个⼦窗⼝部件分配固定的⼤⼩和位置,是通过调⽤基类QWidget 提供的setGeometry()函数来实现的。

所以绝对位置法有很多缺点:1> ⽤户⽆法改变窗⼝的⼤⼩,当⽗窗⼝改变时,⼦窗⼝不能做出相应的调整。

2>如果⽤户选择的字体太⼤或者翻译成多国语⾔,特别是俄语,很多都会显⽰不全被截断。

3> 对于不同风格的平台,这些窗⼝部件可能会具有并不合适的尺⼨⼤⼩。

4>必须⼈⼯计算这些位置和⼤⼩。

这样做不仅⾮常枯燥⽽且极易出错,并且还会让后期的维护⼯作变得痛苦万分。

很显然,使⽤这种⽅式管理GUI 应⽤程序⼤⼤降低了程序员的开发效率,降低了应⽤程序的质量和适应性。

2.⼈⼯布局法这种⽅法的核⼼是通过重载QWidget::resizeEvent(QResizeEvent*)函数来使得⼦窗⼝的的⼤⼩尺⼨总是和⽗窗⼝的⼤⼩成⽐例,也就在⼀定程度上减轻了计算量,但是在其中也要通过setGeometry()函数来设置⼦窗⼝部件的位置和⼤⼩。

在程序的规模⽐较⼩,并且不需要时常变更设计的情况下,绝对位置法勉强可以胜任。

但是它就像前⾯的绝对位置法⼀样,仍然需要计算许多⼿写代码中的常量,尤其是当设计被改变的时候,这种情况更加突出,⽽且它并没有消除⽂本会被截断的危险。

Qt的5种常用布局搭建

Qt的5种常用布局搭建

Qt的5种常⽤布局搭建Qt布局详解:界⾯开发⾸先要对整个界⾯进⾏布局,使窗体上的所有的控件必须有⼀个合适的尺⼨和位置。

那么做出来的界⾯才看起来美观。

那么如何对界⾯进⾏布局呢?Qt提供了⼀些类负责排列窗体上的控件,主要有:QHBoxLayout,QVBoxLayout,QGridLayout,QFormLayout,QStackLayout。

(布局管理类)这些类简单易⽤,⽆论在代码中还是⽤Qt Designer开发程序都能⽤到。

常⽤的布局⽅法:(1)使⽤⽔平布局类QHBoxLayout;(2)使⽤垂直布局类QVBoxLayout;(3)使⽤⽹格布局类QGridLayout;(4)使⽤表格布局类QFormLayout;(5)使⽤分组布局类QStackLayout( QStackedLayout类把⼦控件进⾏分组或者分页,⼀次只显⽰⼀组或者⼀页,隐藏其他组或者页上的控件)。

这些⽅法可以嵌套使⽤。

使⽤这些Qt布局管理类的另⼀个原因是,在程序、系统改变字体,语⾔或者在不同的平台上运⾏时,布局管理器能够⾃动调整窗体⾥所有控件的⼤⼩和尺⼨。

布局管理的三种⽅式:Qt中有三种⽅式对窗体上的控件进⾏布局管理:1.绝对位置定位(absolute positioning):控件布局是固定位置,没有⾃适应功能。

例⼦如下:QWidget *pWidget = new QWidget;QLabel label(pWidget);label.setText(QObject::tr("姓名:"));label.setGeometry(10,10,20,20);QLineEdit namedLineEdit("⼩王",pWidget);namedLineEdit.setGeometry(35,10,50,20);QPushButton *btn = new QPushButton(QObject::tr("关闭"),pWidget);btn->setGeometry(90,10,40,20);2.⼿⼯布局(manual layout):给出控件的绝对位置,但是他们的尺⼨根据窗⼝的⼤⼩确定,可以通过重写窗体控件的resizeEvent()实现对⼦控件的⼤⼩设置。

第4章 布 局 管 理

第4章 布 局 管 理

下面通过一个简单的例子来学习停靠窗口QDockWidget类的使用,窗口1只可 在主窗口的左边和右边停靠;窗口2只可在浮动和右部停靠两种状态间切换,并 且不可移动;窗口3可实现停靠窗口的各个状态。效果如图4.2所示。
(1) 创建一个工程,创建过程中在“Qt4 Gui Application”界面中“Base Class” 下拉列表框中选择“QMainwindow”选项,停靠窗口DockWindows类继承自 QMainWindow类,停靠窗口只在主窗口QMainWindow中使用。因此,在“Class name”后面的文本框中输入“DockWindows”,取消“Gernerate form”复选框 的选中状态,如图4.3所示。
在文件开始部分添加以下头文件:
#include <QListWidget> #include <QStackedWidget> #include <QLabel>
(3) 打开stackdlg.cpp文件,在停靠窗体StackDlg类的构造函数中添加代码。 (4) 在stackdlg.cpp文件的开始部分加入以下头文件: #include<QHBoxLayout> (5) 运行程序,显示效果如图4.4所示。
4.1 分割窗口QSplitter类 4.2 停靠窗口QDockWidget类 4.3 堆栈窗体QStackedWidget类 4.4 基本布局(QLayout) ( )
下面介绍一个十分简单的分割窗口功能,整个对话框由3个窗口组成,各窗 口之间的大小可随意拖动改变,效果如图4.1所示。
(1) 创建一个工程,创建过程在第2章中已经详细介绍过,在这里就不在赘述。 需要注意的是,创建过程在“Qt4 Gui Application”界面中,Base Class选择 “QMainwindow”选项,取消“Gernerate form”复选框的选中状态。 (2) 在上述工程的main.cpp文件中添加如下灰色背景代码。 (3) 在main.cpp文件的开始部分加入以下头文件: #include<Qsplitter> #include<QTextEdit> #include <QTextCodec> (4) 运行程序,显示效果如图4.1所示。

QtCreator布局管理器的使用

QtCreator布局管理器的使用

QtCreator布局管理器的使用布局管理器是用于在应用程序用户界面中自动排列和定位窗口部件的工具。

Qt Creator提供了多种布局管理器,以满足不同的需求。

使用布局管理器可以使窗口部件自动适应不同的窗口大小和分辨率,并确保它们以一致的方式进行布局。

在设计器中,可以通过拖放的方式将窗口部件添加到窗口区域。

布局管理器可以使用以下几种方式进行设置:1. 垂直布局管理器(QVBoxLayout):它可以将窗口部件垂直排列。

在设计器中,拖放一个垂直布局管理器到窗口区域,并将要排列的窗口部件添加到该布局管理器中。

在布局管理器的属性窗口中,可以设置间距和对齐方式。

2. 水平布局管理器(QHBoxLayout):它可以将窗口部件水平排列。

操作方式类似于垂直布局管理器。

3. 网格布局管理器(QGridLayout):它将窗口部件以网格的形式排列。

在设计器中,拖放一个网格布局管理器到窗口区域,并使用布局管理器的属性窗口设置网格的行数和列数。

然后,将窗口部件添加到该布局管理器中的指定位置。

4. 堆叠布局管理器(QStackedLayout):它将窗口部件叠放在一起,只显示当前活动的窗口部件。

在设计器中,拖放一个堆叠布局管理器到窗口区域,并将要堆叠的窗口部件添加到该布局管理器中。

在布局管理器的属性窗口中,还可以设置部件的拉伸因子、大小约束和边距等属性。

布局管理器还提供了一些方法,可以通过编程方式修改布局以及窗口部件的属性。

例如,可以使用addLayout(方法将一个布局管理器添加到另一个布局管理器中,以创建更复杂的布局。

另外,布局管理器还支持对窗口部件进行扩展、收缩和隐藏等操作。

例如,可以使用addStretch(方法将一个弹簧部件添加到布局管理器中,使其占据剩余空间。

还可以使用addWidget(方法将一个窗口部件添加到布局管理器中。

总之,Qt Creator提供了丰富的布局管理器,并且使用它们非常方便。

通过使用布局管理器,可以轻松创建自适应和易于管理的用户界面。

Qt界面布局管理详解

Qt界面布局管理详解

本节再以一个稍微复杂的例子来讲解设计 GUI 的常见功能,包括界面设计时布局的管理,以及程序里如何访问界面组件。

实例程序功能创建一个 Widget Application 项目 samp2_2,在创建窗体时选择基类QDialog,生成的类命名为 QWDialog,并选择生成窗体。

如此新建的项目 samp2_2 有一个界面文件 qwdialog.ui,一个头文件qwdialog.h 和源程序文件 qwdialog.cpp。

此外,还有项目文件 samp2_2.pro 和主程序文件 main.cpp。

qwdialog.ui 界面文件设计时界面如图 1 所示。

程序的主要功能是对中间一个文本框的文字字体样式和颜色进行设置。

图 1 实例程序 samp2_2 设计时界面在界面设计时,对需要访问的组件修改其 objectName,如各个按钮、需要读取输入的编辑框、需要显示结果的标签等,以便在程序里区分。

对于不需要程序访问的组件则无需修改其 objectName,如用于界面上组件分组的 GroupBox、Frame、布局等,让 UI 设计器自动命名即可。

对图 1 中几个主要组件的命名、属性设置见表 2。

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

1.objectName 是窗体上创建的组件的实例名称,界面上的每个组件需要有一个唯一的 objectName,程序里访问界面组件时都是通过其 objectName 进行访问,自动生成的槽函数名称里也有 objectName。

所以,组件的 objectName 需要在设计程序之前设置好,设置好之后一般不要再改动。

若设计程序之后再改动objectName,涉及的代码需要相应的改动。

2.窗体的 objectName 就是窗体的类名称,在 UI 设计器里不要修改窗体的objectName,窗体的实例名称需要在使用窗体的代码里去定义。

界面组件布局Qt 的界面设计使用了布局(Layout)功能。

qt layout 工作原理

qt layout 工作原理

qt layout 工作原理Qt是一种跨平台的应用程序开发框架,它提供了丰富的工具和功能,帮助开发人员轻松创建各种类型的应用程序。

Qt的布局管理器是一种用于管理应用程序中的控件布局的机制。

在本文中,我们将深入探讨Qt布局管理器的工作原理。

布局是指应用程序中控件的排列方式。

Qt提供了多种布局管理器,包括水平布局、垂直布局、网格布局等。

布局管理器允许开发人员在不同的容器中自由组合和调整控件的位置和大小,以适应不同窗口大小和分辨率的需求。

Qt的布局管理器基于盒子模型的概念。

每个容器都是一个矩形盒子,可以包含一个或多个控件。

布局管理器根据容器的大小和设置的规则来调整控件的位置和大小。

开发人员只需将控件添加到布局管理器中,布局管理器将自动处理控件的排列和调整。

布局管理器使用了一套规则来确定控件的位置和大小。

这些规则可以通过代码或可视化界面编辑器进行设置。

布局管理器将根据容器的大小和设置的规则,计算出每个控件的位置和大小,并自动进行调整。

这样,无论窗口的大小如何改变,控件的位置和大小都会自动适应。

Qt的布局管理器还提供了一些特殊功能,例如伸缩因子和对齐方式。

伸缩因子可以用来控制控件在布局中的比例,从而实现不同控件之间的伸缩效果。

对齐方式可以用来控制控件在容器中的对齐方式,例如居中、左对齐、右对齐等。

布局管理器的工作原理可以分为两个主要步骤:布局计算和布局应用。

在布局计算阶段,布局管理器会根据容器的大小和设置的规则,计算出每个控件在布局中的位置和大小。

在布局应用阶段,布局管理器将根据计算得到的结果,调整每个控件的位置和大小。

布局管理器的工作原理可以总结为以下几个步骤:1. 创建布局管理器对象:首先,需要创建一个布局管理器对象,并将其设置为容器的布局管理器。

2. 添加控件到布局管理器:然后,将需要布局的控件添加到布局管理器中。

可以使用addLayout()、addWidget()等方法来添加控件。

3. 设置布局规则:接下来,需要设置布局管理器的规则,例如控件的对齐方式、伸缩因子等。

第4章 布局管理 19

第4章 布局管理 19

• 对QSplitter 进行水平或者垂直嵌套可以实现 更加复杂的布局。 • 例如,图 所示的MailClient程序中,就是一 个垂直方向的QSplitter 控件中嵌套了一个水 平方向的QSplitter 控件。
• 111
• 创建完我们所需要显示三个控件(messageTreeWidget, textEdit,foldersTreeWidget)后, • 我们创建一个垂直的QSplitter,rightSplitter 控件,把 messageTreeWidget 和textEdit控件加到rightSplitter 中。 • 然后创建一个水平的QSplitter,mainSplitter 控件,把 rightSplitter 和foldersTreeWidget 加入到mainSplitter 中。 • 把mainSplitter 做为QMainWindow 的中央控件。
下面介绍一个十分简单的分割窗口功能,整个对话框由3个窗口组成,各窗 口之间的大小可随意拖动改变,效果如图4.1所示。
• 一个QSplitter 控件中可以包含其他控件,这些控件被一个 分隔条隔开,托拽这个分隔条,里面的控件的大小可以改 变。QSplitter 控件经常做为布局管理器使用,给用户提供 更多的界面控制。 • QSplitter 控件中的子控件总是按顺序自动水平排列(或者 上下排列)。相邻的控件之间有一个分隔条
• 每一个可停靠控件都有一个标题条。用户可以拖动标题栏 把窗口从一个可停靠区域移动到另一个可停靠区域。 • 拖动标题栏把窗口移动到不能停靠的区域,窗口就浮动为 一个独立的窗口。自由浮动的窗口总是在主窗口的上面。 • 用户点击标题栏上的关闭按钮可以关闭QDockWidget。 • 调用QDockWidget::setFeatures()能够设置以上这些属性。

Qt Creator 快速入门实验讲义(带目录)

Qt Creator 快速入门实验讲义(带目录)

《Qt Creator快速入门》第2版实验讲义2014年6月目录实验1 Qt开发环境的搭建......................................................- 2 -目的与要求..................................................................................................................- 2 - 实验准备......................................................................................................................- 2 - 实验内容......................................................................................................................- 2 -实验2 编译和发布Qt程序...................................................- 16 -目的与要求................................................................................................................- 16 - 实验准备....................................................................................................................- 16 - 实验内容....................................................................................................................- 16 -实验3 使用Qt资源文件.......................................................- 25 -目的与要求................................................................................................................- 25 - 实验准备....................................................................................................................- 25 - 实验内容....................................................................................................................- 25 -实验4 创建登陆对话框..........................................................- 30 -目的与要求................................................................................................................- 30 - 实验准备....................................................................................................................- 30 - 实验内容....................................................................................................................- 30 -实验5 定时器和随机数..........................................................- 35 -目的与要求................................................................................................................- 35 - 实验准备....................................................................................................................- 35 - 实验内容....................................................................................................................- 35 -实验6 编译MySQL数据库驱动............................................- 38 -目的与要求................................................................................................................- 38 - 实验准备....................................................................................................................- 38 - 实验内容....................................................................................................................- 38 -实验7 数据库基本操作............................................................- 49 -目的与要求................................................................................................................- 49 - 实验准备....................................................................................................................- 49 - 实验内容....................................................................................................................- 49 -实验8 Qt数据库应用编程(综合设计)................................- 55 -目的与要求................................................................................................................- 55 - 实验准备....................................................................................................................- 55 - 实验内容....................................................................................................................- 55 -实验1 Qt开发环境的搭建目的与要求(1)掌握Qt开发环境的搭建方法(2)掌握Qt Creator的基本使用方法(3)了解Qt Creator的界面布局(4)了解Qt相关工具软件实验准备(1)对Qt及Qt Creator有基本了解(2)了解MinGW(3)下载Qt 4.8.5、Qt Creator 2.8.0和MinGW安装包实验内容1.安装Qt Creator(1)双击运行qt-creator-windows-opensource-2.8.0.exe安装包,将出现如图1.1所示的安装向导界面。

使用Qt进行跨平台应用程序开发的基本教程

使用Qt进行跨平台应用程序开发的基本教程

使用Qt进行跨平台应用程序开发的基本教程Qt是一个跨平台的应用程序开发框架,它提供了丰富的工具和库,可以用于开发各种类型的应用程序,包括桌面应用程序、移动应用程序和嵌入式应用程序等。

本文将介绍使用Qt进行跨平台应用程序开发的基本教程,包括框架的安装与配置、界面设计与布局、事件处理与信号槽、数据存储与访问等内容。

第一章:框架的安装与配置在开始使用Qt进行开发之前,我们首先需要下载并安装Qt框架。

Qt官网(https://www.qt.io/)提供了Qt的开源版本和商业版本,根据自己的需求选择相应的版本进行下载。

下载完成后,按照安装向导进行安装。

在安装过程中,可以选择安装Qt Creator(一个集成了编译器、调试器和图形界面设计工具的开发环境),以及Qt的各种模块和插件,根据自己的项目需求进行选择。

安装完成后,我们需要进行配置。

打开Qt Creator,进入“工具”→“选项”,在“构建和运行”选项卡中设置编译器和调试器的路径,确保能够正常编译和运行程序。

第二章:界面设计与布局Qt提供了丰富的界面设计工具,可以帮助我们快速创建各种界面元素,并灵活地布局。

在Qt Creator中,可以使用Qt Designer 进行界面设计。

创建一个新的界面文件,选择合适的界面元素,例如按钮、标签、文本框等,通过拖拽的方式将它们放置到界面上。

然后,可以使用属性编辑器对界面元素进行属性设置,如文本内容、样式等。

Qt提供了多种布局管理器,可以实现不同的布局效果,如水平布局、垂直布局、表格布局等。

通过将界面元素放置到相应的布局管理器中,可以方便地调整界面的布局。

第三章:事件处理与信号槽在应用程序中,用户的输入操作会触发相应的事件,我们可以通过事件处理机制来响应用户的操作。

Qt使用信号槽机制来实现事件处理。

在Qt中,对象之间通过信号与槽进行通信。

一个对象可以发出一个信号,而另一个对象可以将这个信号与自己的槽函数连接起来,从而在信号发出时执行相应的操作。

布局管理

布局管理
注意:
伙伴关系只能在Label与其他部件之间建立。
4.3 设置Tab键顺序
对于一个应用程序,有时希望使用Tab键来将焦点 从一个部件移动到下一个部件。在设计模式,设 计器提供了Tab键的设置功能。
按下设计器顶部栏的编辑Tab顺序按钮进入编辑Tab键顺 序模式,这时已经显示出了各个部件的Tab键顺序,只 需要用鼠标点击这些数字,就可以更改它们。
设计自己的布局管理器时,才使用QLayout和QLayoutItem。
一般只需要使用QLayout的几个子类就可以了:
QBoxLayout(基本布局管理器) QGridLayout(栅格布局管理器) QFormLayout(表单布局管理器) QStackedLayout(栈布局管理器)
使用部件管理器的效果
4.1.3 可扩展窗口
可扩展窗口
只有在必要的时候才显示出来,平时可以隐藏起来。 (如:安装软件时的“查看详情”。)
实现可扩展窗口,得力于布局管理器的特性:
当子部件隐藏时,布局管理器自动缩小;当子部件重新 显示时,布局管理器再次放大。
textEdit->setVisible(),textEdit->hide()。 layoutSizeConstraint要设置为setFixedSize。
栅格布局管理器(QGridLayout)
QGridLayout类
使得部件在网格中进行布局。 它将空间分隔成一些行和列,行和列的交叉处形成单元
格,然后将部件放入一个或相邻的多个单元格中。 向布局管理器中添加部件的函数
layout->addWidget(widget,row,column,rowSpan,columnSpan); 例如:layout->addWidget(ui->lineEdit,0,0,2,1);

Qt之布局管理--基本布局

Qt之布局管理--基本布局

Qt之布局管理--基本布局Qt提供的布局类以及他们之间的继承关系QLayout-----QGirdLayout | ---QBoxLayout----QHBoxLayout | --QVBoxLayout-----------------------------------------------------------------------------常⽤到的布局类有:QHBoxlayout、QVBoxLayout、QGridLayout三种,分别是⽔平排列布局、垂直排列布局、表格排列布局。

常⽤到的⽅法有:addWidget()和addLayout().addWidget()⽤于在布局中插⼊控件,addLayout()⽤于在布局中插⼊⼦布局。

----------------------------------------------------------------------------在布局管理还常⽤到 setMargin()⽤于设定边距,setSpacing()⽤于设定控件间距。

setColumnStretch()⽤于设置列的占空⽐。

-----------------------------------------------------------------------------⽐起QHBoxLayout和QVBoxLayout,QGridLayout运⽤起来更加灵活。

QGridLayout的常⽤⽅法1)addWidget⽅法: //放置⼀个控件到⼀个单元格 void addWidget(QWidget *widget,int row,int column,Qt::Alignment alignment =0 ) //如果放置的控件超出⼀个单元格,则使⽤该⽅法。

void addWidget(QWidget *widget,int fromRow,int fromColumn,int rowSpan,int columnSpan,Qt::Alignment alignment = 0) 1》row:指放置控件的⽹格⾏号(⾏号从0开始); 2》column:指放置控件的⽹格列号(从0开始); 3》alignment:对齐⽅式。

QtDesigner之布局管理

QtDesigner之布局管理

QtDesigner之布局管理⼀、布局应⽤QtDesigner中有⽔平布局、垂直布局、栅格布局、容器布局、表单布局、以及绝对布局。

(⼀)⽔平布局将多个空间在⽔平⽅向展⽰,并且每个控件之间的间隔是相同的。

创建⽔平布局有两种⽅式:1、控件-⽔平布局这种⽅式就是先将空间拖到主窗⼝,然后再进⾏⽔平布局。

拖动三个button控件到主窗⼝。

选中所有的空间然后右键选择layout中的horizontally即可。

2、⽔平布局-控件这种⽅法是先将⽔平布局控件移动到主窗⼝中,然后拖动⽐如button按钮,但是此时这个按钮会占据整⾏,我们只需要在该按钮的最右边或者最左边插⼊新的控件即可:3、运⾏将布局视图转成python代码进⾏运⾏,将布局转成python代码:# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'horizontal.ui'## Created by: PyQt5 UI code generator 5.13.0## WARNING! All changes made in this file will be lost!from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(800, 600)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)self.horizontalLayoutWidget.setGeometry(QtCore.QRect(110, 70, 239, 80))self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)self.horizontalLayout.setContentsMargins(0, 0, 0, 0)self.horizontalLayout.setObjectName("horizontalLayout")self.pushButton = QtWidgets.QPushButton(self.horizontalLayoutWidget)self.pushButton.setObjectName("pushButton")self.horizontalLayout.addWidget(self.pushButton)self.pushButton_2 = QtWidgets.QPushButton(self.horizontalLayoutWidget)self.pushButton_2.setObjectName("pushButton_2")self.horizontalLayout.addWidget(self.pushButton_2)self.pushButton_3 = QtWidgets.QPushButton(self.horizontalLayoutWidget)self.pushButton_3.setObjectName("pushButton_3")self.horizontalLayout.addWidget(self.pushButton_3)MainWindow.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))self.menubar.setObjectName("menubar")MainWindow.setMenuBar(self.menubar)self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))self.pushButton.setText(_translate("MainWindow", "PushButton"))self.pushButton_2.setText(_translate("MainWindow", "PushButton"))self.pushButton_3.setText(_translate("MainWindow", "PushButton"))horizontal然后在新建py⽂件,进⾏运⾏:import sysimport horizontalfrom PyQt5.QtWidgets import QApplication,QMainWindowif__name__ == '__main__':app = QApplication(sys.argv)mainWindow = QMainWindow()ui = horizontal.Ui_MainWindow()#向主窗⼝添加控件ui.setupUi(mainWindow)mainWindow.show()sys.exit(app.exec_())(⼆)其它布局其它布局与上⾯的布局⼏乎⼀模⼀样,可以按照上⾯的⽅式实现,这⾥这种说⼀下容器布局和绝对布局:1、容器布局其实容器布局本质使⽤的还是上⾯⽔平布局、垂直布局、栅格布局、表单布局。

qtcreater快速入门

qtcreater快速入门
QApplication a(argc, argv); myDlg my1;
if(my1.exec()==QDialog::Accepted) {
Widget w;
w.show(); } return a.exec();
}
这样,因为 w 是在 if 语句里定义的,所以当 if 语句执行完后它就无效了。这样 导致的后果就是,按下 enterBtn 后,主界面窗口一闪就没了。如果此时对程序 改动了,再次点击运行时,就会出现 error: collect2: ld returned 1 exit status 的错误。这是因为虽然主窗口没有显示,但它只是隐藏了,程序并没有 结束,而是在后台运行。所以这时改动程序,再运行时便会出错。你可以按下调 试栏上面的红色 Stop 停止按钮来停止程序运行。你也可以在 windows 任务管理 器的进程中将该进程结束,而后再次运行就没问题了,当然先关闭 Qt Creator, 而后再重新打开,这样也能解决问题。
8.如下图,在主窗口加入按钮,显示文本为“弹出一个对话框”,在其上点击鼠 标右键,在弹出的菜单中选择 go to slot。
9.我们选择单击事件 clicked()。
10.我们在弹出的槽函数中添加一句:
my2.show();
my2 为我们新建对话框类的另一个对象,但是 my2 我们还没有定义,所以 在 widget.h 文件中添加相应代码,如下,先加入头文件,再加入 my2 的定义语 句,这里我们将其放到 private 里,因为一般的函数都放在 public 里,而变量 都放在 private 里。
Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;

qt界面开发知识点

qt界面开发知识点

qt界面开发知识点一、概述Qt是一款跨平台的图形用户界面(GUI)开发框架,它提供了一组丰富的工具和类库,用于开发各种类型的应用程序。

在Qt界面开发中,掌握一些基本的知识点是非常重要的。

本文将深入探讨Qt界面开发的知识点,包括布局管理、信号与槽机制、界面设计和自定义控件等。

二、布局管理2.1 布局管理器Qt提供了多种布局管理器,用于自动调整控件的位置和大小,以适应不同的窗口大小。

常用的布局管理器包括水平布局(QHBoxLayout)、垂直布局(QVBoxLayout)、网格布局(QGridLayout)等。

布局管理器可以方便地实现界面的自适应布局,减少手动调整控件位置和大小的工作量。

2.2 控件对齐在Qt界面开发中,控件对齐是一个非常重要的概念。

通过设置控件的对齐方式,可以使界面看起来更加美观和整洁。

Qt提供了多种对齐方式,包括左对齐(Qt::AlignLeft)、右对齐(Qt::AlignRight)、居中对齐(Qt::AlignCenter)等。

2.3 控件间距控件间距指的是控件之间的间隔距离。

在Qt界面开发中,通过设置控件的间距可以使界面看起来更加美观和舒适。

Qt提供了设置控件间距的方法,可以根据实际需求进行调整。

三、信号与槽机制3.1 信号与槽的概念信号与槽是Qt中一种重要的机制,用于实现对象之间的通信。

信号是一个特殊的函数,当某个事件发生时会自动被触发。

槽是一个普通的函数,用于处理信号触发后的操作。

通过信号与槽机制,可以实现界面控件之间的交互和数据传递。

3.2 信号与槽的连接在Qt界面开发中,通过connect函数可以将信号与槽进行连接。

连接信号与槽时,需要指定信号的发送者、槽的接收者以及信号与槽的名称。

一旦信号与槽成功连接,当信号触发时,对应的槽函数将被自动调用。

3.3 自定义信号与槽除了使用Qt提供的信号与槽,开发者还可以自定义信号与槽。

通过使用signals关键字声明信号,使用slots关键字声明槽,可以实现自定义的信号与槽。

详解QT布局管理界面.

详解QT布局管理界面.

详解QT 布局管理界面栅格布局管理器可以以网格的形式,将它所管理的部件以一定的矩阵形式排列。

比如上图中,所有的部件一起看,其实就是一种矩阵的形式来排列的。

栅格布局管理器最典型的用法是将部件规规矩矩的排列好,每个栅格的单元格里放一个部件,如下图的示例:类似上图这种布局比较容易实现,只需要把各个部件填入到指定的单元格里即可,示例代码如下:1m_Layout->addWidget(Label1, 0, 0); // 将Label1填到(0,0)单元格2m_Layout->addWidget(Label2, 0, 2); // 将Label2填到(0,2)单元格3……而我们要实现的这个温度转换器的界面,并不是一个规则的栅格结构。

而是如下这种结构:上图中的这6部分,并不是规规矩矩的栅格形式。

那怎么办呢?没关系,栅格布局管理器提供了很大的灵活性。

具体表现在,可以设定某个部件是否需要横跨n个列,或者是否需要纵越m个行~~。

什么意思呢?先来看一个简单的例子以上面这种布局来说,三个部件其中有两个部件是比较规矩的处于两个单元格内,但是第三个部件就横跨了两列,实际上,我们可以这样来看这张布局图:这样就一目了然了。

第三个部件的确是横跨了两列(在水平方向上占用了两个单元格)。

在使用栅格布局管理器对三个部件进行管理时,就可以这样:m_Layout->addWidget(m_Widget1, 0, 0); // 第一个部件在(0,0)5m_Layout->addWidget(m_Widget2, 0, 1); // 第二个部件在(0,1)6m_Layout->addWIdget(m_Widget3, 1, 0, 1,2); // 第三个部件起始于(1,0),并纵越1行,横跨2列同样的,再看下图:我们可以认为右侧的部件纵越了两行(在垂直方向上占用了两个单元格),对应的示例代码:7m_Layout->addWidget(m_Widget1, 0, 0); // 第一个部件在(0,0)8m_Layout->addWidget(m_Widget2, 1, 0); // 第二个部件在(1,0)9m_Layout->addWIdget(m_Widget3, 0, 1, 2, 1); // 第三个部件起始于(0,1),并纵越2行,横跨1列这其实很类似于HTML里利用Table做网页布局时使用的手段。

Qt Creator 窗体控件自适应窗口大小布局

Qt Creator 窗体控件自适应窗口大小布局

Qt Creator 窗体控件自适应窗口大小布局常见的软件窗口大小改变(最大化、手动改变时)需要窗口的部件能够自适应布局,而在Qt的应用程序界面设计中,对于像我一样的初学者如何实现窗口自适应调整还是要绕点弯路的。

网上百度了很多,多数说的很含糊,还有很多是用程序实现的,既然已经有Qt Creator那么高集成度的工具了,我还是倾向于直接在Qt Creator中通过可视化配置的方式完成,一是所见即所得,而是效率要高不少。

Qt中如果想实现窗体内空间随着窗体大小调整,必须使用布局管理,常用的布局管理有QHBoxLayout、QVBoxLayout、QGridLayout,空的地方使用spacer 控件进行填充,因此首先将窗体空间使用布局管理典型应用如下图所示。

我这里使用QGridLayout,按住Ctrl多选需要布局的窗体控件,右键-布局-栅格化局,根据需要进行调整。

要想是控件根据窗体进行调整,最为重要的一点就是设置窗口部件的大小策略,各控件均有这一项设置,如下图所示。

这部分具体的参数解释摘录如下:结合控件的SizePolicy属性,来控制布局管理中的控件的尺寸自适应方式。

控件的sizePolicy说明控件在布局管理中的缩放方式。

Qt提供的控件都有一个合理的缺省sizePolicy,但是这个缺省值有时不能适合所有的布局,开发人员经常需要改变窗体上的某些控件的sizePolicy。

一个QSizePolicy的所有变量对水平方向和垂直方向都适用。

下面列举了一些最长用的值:A. Fixed:控件不能放大或者缩小,控件的大小就是它的sizeHint。

B. Minimum:控件的sizeHint为控件的最小尺寸。

控件不能小于这个sizeHint,但是可以放大。

C. Maximum:控件的sizeHint为控件的最大尺寸,控件不能放大,但是可以缩小到它的最小的允许尺寸。

D. Preferred:控件的sizeHint是它的sizeHint,但是可以放大或者缩小E. Expandint:控件可以自行增大或者缩小注:sizeHint(布局管理中的控件默认尺寸,如果控件不在布局管理中就为无效的值)所以对于需要根据窗口大小对应改变的部件我这里就设置为Expandint。

Qt Creator布局管理器的使用

Qt Creator布局管理器的使用

Qt Creator布局管理器的使用
实现过程: 5.其实布局管理器不但能控制器件的布局,还有个很重 要的用途是,它能使器件的大小随着窗口大小的改变而 改变。 我们先在主窗口的中心拖入一个文本编辑器Text Edit。
Qt Creator布局管理器的使用
实现过程: 5.这时直接运行程序,效果如下。可以看到它的大小 和位置不会随着窗口改变。
Qt Creator布局管理器的使用
实现过程: 运行一下程序,可以看到无论怎样拉伸窗口,文本编 辑框的大小都会随之改变。
实现过程: 2.将这三个按钮放入垂直布局管理器,效果如下。 可以看到按钮垂直方向排列,并且宽度可以改变, 但高度没有改变。
Qt Creator布局管理器的使用
实现过程: 3.我们将布局管理器整体选中,按下上面工具栏的 Break Layout按钮,便可取消布局管理器。(我 们当然也可以先将按钮移出,再按下Delete键将布 局管理器删除。)
Qt Creator布局管理器的使用
实现过程: 4.下面我们改用分裂器部件(QSplitter)。 先将三个按钮同时选中,再按下上面工具栏的Lay Out Vertically in Splitter(垂直分裂器)。
Qt Creator布局管理器的使用
实现过程: 效果如下图。可以看到按钮的大小可以随之改动。这 也就是分裂器和布局管理器的分别。
Qt Creator布局管理器的使用
实现过程: “编辑”子菜单的内容如下。
Qt Creator布局管理器的使用
实现过程: “帮助”子菜单的内容如下。
Qt Creator布局管理器的使用
实现过程: 2.我们在动作编辑器中对各个菜单的属性进行设置。
Qt Creator布局管理器的使用

布局管理器使用

布局管理器使用

布局管理器的使用在前一篇中我们学习了使用资源文件为主窗口添加菜单图标。

这次,我们先将菜单进行完善,然后讲解一些布局管理方面的内容。

一、完善菜单1.新建Qt Gui应用,项目名称为myMainWindow,基类选择QMainWindow,类名为MainWindow。

2.完成后,在设计模式添加菜单项,并添加资源文件,向其中添加菜单图标。

最终各个菜单如下图所示。

在Action编辑器中修改动作的对象名称、图标和快捷键,最终如下图所示。

二、向工具栏添加菜单图标可以将动作编辑器中的动作拖动到工具栏中作为快捷图标使用,如下图所示。

可以在工具栏上点击鼠标右键来添加分隔符,如下图所示。

最终工具栏如下图所示。

三、布局管理器1.从左边控件栏中拖入三个按钮Push Button和一个Vertical Layout(垂直布局管理器)到界面上,如下图所示。

然后将三个按钮拖入到布局管理器中,这时三个按钮就会自动垂直排列,并且进行水平拉伸,无论如何改变布局管理器的大小,按钮总是水平方向变化。

如下图所示。

2.我们可以选中布局管理器,然后按下上方工具栏中的“打破布局”按钮来删除布局管理器。

(当然也可以先将三个按钮移出,然后按下Delete键来删除布局管理器,如果不移出按钮,那么会将它们同时删除。

)如下图所示。

3.下面我们使用分裂器(QSplitter)来进行布局,先同时选中三个按钮,然后按下上方工具栏中的“使用分裂器垂直布局”按钮,如下图所示。

然后我们进行放大,可以发现,使用分裂器按钮纵向是可以变大的,这就是分裂器和布局管理器的重要区别。

如下图所示。

4.布局管理器除了可以对部件进行布局以外,还有个重要用途,就是使部件随着窗口的大小变化而变化。

我们删除界面上的部件,然后拖入一个文本编辑器Text Edit部件。

如下图所示。

然后我们在界面上点击鼠标右键,选择布局→栅格布局(或者使用快捷键Ctrl+G)。

这时整个文本编辑器部件就会填充中央区域。

Qt的第四章

Qt的第四章


在设计模式静态添加部件 在代码中动态添加部件

addWidget()

设置布局属性

QGridLayout 栅格布局 使用方式:


在设计模式静态添加部件 在代码中动态添加部件

addWidget()


QFormLayout 表单布局,常用于管理输入部件及其相关 的标签,将部件分为两列,左边是标签, 右边是输入部件。 自动将输入部件及标签设置为伙伴关系。 组件的添加:

FormLayout:


3)可扩展窗口 利用子部件隐藏式,布局管理器自动缩小 的特性,实现窗口的伸缩扩展。
使用hide()或setVisible(false)实现部件的隐 藏。 使用show()或setVisible(true)实现部件的显 示。



4)分裂器 使用方式与BoxLayout类似。 特点: 部件大小随分裂器(Splitter)的大小而变化。 可设置边框。


布局中设置大小的重要属性 BoxLayout:

layoutStrech:设置其中部件的比例 layoutFieldGrowthPolicy:部件大小变化的方式 layoutRowWrapPolicy:设置是否换行 layoutLabelAlignment:标签对齐方式 layoutFormAlignment:部件对齐方式

双击界面中的Form Layout部件,可弹出添加表 单对话框,方便添加标签和输入控件。

2)设置部件大小 在layout中,子部件不能随意改变大小,但 可根据预设规则,随layout的大小而改变。
部件中设置大小的重要属性: sizeHint:部件的建议大小 minimunSizeHint:部件最小建议大小 sizePolicy:部件的大小设置策略
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

可以按下快捷键Alt+N,这样光标就可以定位到“姓名”标签后的行编辑器中。
综合使用布局管理器
将前面的界面再进行设计:按下Ctrl键同时选中界面上的字体选择框 fontComboBox和按钮pushButton,然后按下Ctrl+H快捷键将它们放入一个水 平布局管理器中。然后再从部件栏中拖入一个Vertical Spacer垂直分隔符, 它们是用来在部件间产生间隔的,将它放在表单布局管理器与水平布局管理 器之间。 最后点击主界面,然后按下Ctrl+L快捷键,让整个界面处于一个垂直布局管 理器中。这时我们可以在右上角的对象列表中选择分隔符Spacer,然后在属 性栏中设置它的高度为100。
基本布局管理器(QBoxLayout)
基本布局管理器QBoxLayout类可以使子部件在水平方向或者垂直方向排成一 列,它将所有的空间分成一行盒子,然后将每个部件放入一个盒子中。它有 两个子类QHBoxLayout水平布局管理器和QVBoxLayout垂直布局管理器。布局 管理器的几个属性如下表所示。

大小策略(sizePolicy)属性
sizePolicy属性的所有取值如下表所示 :
伸缩因子(stretch factor)
它是用来设置部件间的比例的。 例如,界面上的字体选择框和一个按钮处于一个水平布局 管理器中,现在想让它们的宽度比例为2:1,那么就可以 点击对象栏中的horizontalLayout水平布局管理器对象, 然后在它的属性栏中将layoutStretch属性设置为“2,1”, 这样这个水平布局管理器中的两个部件的宽度就是2:1的 比例了。
在设计模式,从部件栏中找到Form Layout,将其拖入到 界面上,然后双击它,或者在它上面点击鼠标右键,选择 “添加窗体布局行”菜单。然后在弹出的“添加表单布局 行”对话框中填入标签文字“姓名(&N):”,这样下面便 自动填写了“标签名称”、“字段类型”和“字段名称” 等,并且设置了伙伴关系。
这里填写的标签文字中(&N),要注意括号必须是英语半角的,表明它的快 捷键是Alt+N,设置伙伴关系表示当按下Alt+N时,光标会自动跳转到标签后 面对应的行编辑器中。按下确定键,便会在布局管理器中添加一个标签和一 个行编辑器。按照这种方法,再添加三行:性别(&S),使用QComoBox;年龄 (&A),使用QSpinBox;邮箱(&M),使用QLineEdit。
分裂器QSplitter类提供了一个分裂器部件。其实它和QBoxLayout很相似, 可以完成布局管理器的功能,但是包含在它里面的部件,默认是可以随着分 裂器的大小变化而进行相应大小变化的。 比如一个按钮,放在布局管理器中,它的垂直方向默认是不会被拉伸的,但 是放到分裂器中就可以被拉伸。 还有一个不同就是,布局管理器是继承自QObject类的,而分裂器却是继承 自QFrame类,QFrame类又是继承自QWidget类,也就是说,分裂器拥有 QWidget类的特性,它是可见的,而且可以像QFrame一样设置边框。




部件随窗口变化大小
在设计模式中向界面上拖入一个字体选择框Font Combo Box和一个文本编辑 器Text Edit部件。然后点击主界面,并按下Ctrl+L快捷键,这样便设置了 顶层布局管理器,可以看到两个部件已经填满了整个界面。这时运行程序, 然后拉伸窗口,两个部件会随着窗口的大小变化而变化,这就是布局管理器 在起作用。
使用代码实现水平布局
QHBoxLayout *layout = new QHBoxLayout; layout->addWidget(ui->fontComboBox); layout->addWidget(ui->textEdit); layout->setSpacing(50); // 设置部件间的间隔 // 新建水平布局管理器 // 向布局管理器中添加部件
《Qt Creator快速入门》第2版
第4章 布局管理 (1课时)
对于一个完善的软件,布局管理却是必不可少的。无论是 想要界面中部件有一个很整齐的排列,还是想要界面能适 应窗口的大小变化,都要进行布局管理。Qt中主要提供了 QLayout类及其子类来作为布局管理器,它们可以实现常 用的布局管理功能
使用按钮的按下与否两种状态来设置文本编辑器是否显示,并且相应的更改 按钮的文本。为了让文本编辑器在一开始是隐藏的,还要在MyWidget类的 构造函数中添加一行代码:
ui->textEdit->hide(); // 让文本编辑器隐藏,也可以使用setVisible(false)函数
分裂器(QSplitter)


定位子部件; 感知窗口默认大小; 感知窗口最小大小; 改变大小处理; 当内容改变时自动更新: 字体大小,文本或子部件的其他内容随之改变; 隐藏或显示子部件; 移除一个子器的基类,它是一个抽象基类。该 类继承自QObject和QLayoutItem类,而QLayoutItem类提 供了一个供QLayout操作的抽象项目。QLayout和 QLayoutItem都是在设计自己的布局管理器时才使用的, 一般只需要使用QLayout的几个子类就可以了,它们分别 是: QBoxLayout(基本布局管理器) QGridLayout(栅格布局管理器) QFormLayout(表单布局管理器) QStackedLayout(栈布局管理器)
设置部件大小
凡是继承自QWidget的类都有这两个属性:大小提示(sizeHint)和 最小大小提示(minimumSizeHint)。

sizeHint属性保存了部件的建议大小,对于不同的部件,默认拥有不 同的sizeHint,程序中使用sizeHint()函数来获取sizeHint的值; minimumSizeHint保存了一个建议的最小大小。程序中可以使用 minimumSizeHint()函数来获取minimumSizeHint的值 。 需要说明的是,如果使用minimumSize()函数设置了部件的最小大小, 那么最小大小提示将会被忽略。
setTabOrder(ui->pushButton,ui->checkBox);
//spinBox在pushButton前面
//pushButton在checkBox前面
4.4 小结
本章中讲述了一些关于界面布局的知识 , 学生要掌握几个布局管理器的使用方法,学 会综合应用它们。
主 要 内 容

4.1 布局管理系统 4.2 设置伙伴 4.3 设置Tab键顺序 4.4 小结



4.1 布局管理系统
Qt的布局管理系统提供了简单而强大的机制来自动排列一个窗口中的部件, 确保它们有效的使用空间。Qt包含了一组布局管理类来描述怎样在应用程序 的用户界面中对部件进行布局,比如QLayout的几个子类,我们这里将它们 称作布局管理器。所有的QWidget类的子类的实例(对象)都可以使用布局 管理器来管理位于它们之中的子部件,QWidget::setLayout()函数可以在一 个部件上应用布局管理器。一旦一个部件上设置了布局管理器,那么它会完 成以下几种任务:
说明:当部件加入到一个布局管理器中,然后这个布局管理器再放到一个 窗口部件上时,这个布局管理器以及它包含的所有部件都会自动重新定义自 己的父对象(parent)为这个窗口部件,所以在创建布局管理器和其中的部 件时并不用指定父部件。
表单布局管理器(QFormLayout)
表单布局管理器QFormLayout类用来管理表格的输入部件 和与它们相关的标签。表单布局管理器将它的子部件分为 两列,左边是一些标签,右边是一些输入部件,比如行编 辑器或者数字选择框等。例如:
如果要在代码中进行设置,可以在使用布局管理器的 addWidget()函数添加部件的同时,在第二个参数中指定 伸缩因子。
QWidget部件大小相关属性




高度与宽度属性,是现 在界面的大小; sizePolicy属性可以设置 大小策略以及伸缩因子; minimumSize属性用来 设置最小大小; maximumSize属性设置 最大大小; sizeIncrement属性和 baseSize属性是设置窗 口改变大小的,一般不 用设置。
4.2 设置伙伴

伙伴(buddy)是在QLabel类中提出的一个概念。因为一 个标签经常用作一个交互式部件的说明,就像表单布局管 理器时看到的那样,一个lineEdit部件前面有一个标签说 明这个lineEdit的作用。为了方便定位,QLabel提供了一 个有用的机制,那就是提供了助记符来设置键盘焦点到对 应的部件上,而这个部件就叫做这个QLabel的伙伴。 其中助记符就是我们所说的加速键。在使用英文标签时, 在字符串的一个字母前面添加“&”符号,那么就可以指 定这个标签的加速键是Alt加上这个字母,而对于中文, 需要在小括号中指定加速键字母。
layout->setContentsMargins(0, 0, 50, 100); // 设置布局管理器到边界的距离, // 四个参数顺序是左,上,右,下 setLayout(layout);
栅格布局管理器(QGridLayout)
栅格布局管理器QGridLayout类使得部件在网格中进行布局,它将所有的空 间分隔成一些行和列,行和列的交叉处就形成了单元格,然后将部件放入一 个确定的单元格中。例如: QGridLayout *layout = new QGridLayout; // 添加部件,从第0行0列开始,占据1行2列 layout->addWidget(ui->fontComboBox, 0, 0, 1, 2); // 添加部件,从第0行2列开始,占据1行1列 layout->addWidget(ui->pushButton, 0, 2, 1, 1); // 添加部件,从第1行0列开始,占据1行3列 layout->addWidget(ui->textEdit, 1, 0, 1, 3); setLayout(layout);
相关文档
最新文档