首页
学习
活动
专区
圈层
工具
发布

初步学习Qt布局

当可用空间发生变化时,这些布局将自动调整widgets的位置和大小,以确保它们布局的一致性和用户界面主体可用。 所有QWidget的子类都可以用布局来管理它们的子类。...当布局通过这种方式设置到widget,它将负责以下任务: l 子widget的定位 l 窗口的合理默认空间 l 窗口的合理最小空间 l 调整大小处理 l 当内容发生变化时自动调整 n 字体、...这些类都从QLayout继承而来,它们都来源于QObject(而不是QWidget)。创建更加复杂的布局,可以让它们彼此嵌套完成。...布局会自动重新定义它们的父类(通过QWidget::setParent())以确保它们是装载布局的widget的子类。 注意1:布局中的控件是装载布局控件的子控件,不是布局的子控件。...如果没有任何子布局,或者使用手动布局,可以通过下面的机制来改变widget的行为: l 实现QWidget::sizeHint() 来返回首先大小 l 实现QWidget::minimumSizeHint

8.1K10

Effective Qt

简单来说 adjustSize() 是根据子控件调整自己的大小,updateGeometry() 是根据自己的大小和子控件的大小调整子控件的布局。...这个时候你可以选择拿到控件的 QLayout 然后循环对每个布局调用 QLayout::invalidate() ;在比较特殊的情况下你可以选择用 setFixedSize(sizeHint()) 这种奇怪的调用代替循环...尽量使用 QLayout 来控制控件的位置,而不是套用一个又一个的 QWidget ,因为永远不能预料到产品会把一个页面上的哪两个控件联系在一起,如果这些控件相隔了几个 QWidget ,拿到它们的指针将是一件非常蛋疼的事...槽的命名应该以反映他被调用的时机,而不是他的功能。...方便后边的人想在某个信号发送的时候,快速的找到一个准确的槽位置,而不会同一个信号在同一个类里绑定了多个槽 未完待续……

1.1K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    一篇文章让你读懂PyQt5布局管理,绝对干货

    , QWidget) addRow(QWidget, QLayout) addRow(str, QWidget) addRow(str, QLayout) 以上在表单布局最后添加一行数据,设置表单的标签和控件...addRow(QWidget) addRow(QLayout) QWidget和QLayout添加在最后一行,并占据两列宽度 insertRow(row, QWidget, QWidget) insertRow...,通过该方法可以增加额外的控件 addStretch(self, int) 分配布局大小比例 insertStretch(index, stretch = 0) 在指定控件间隔处添加布局比例 insertSpacing...(index, size) 在指定控件间隔处设置间隔大小 addStretch是按照比例来调整界面布局,在页面布局中使用广泛,所以我们要使用一定的篇幅来进行代码测试。...图12 间距设置可以放置在任何地方,对于调整控件位置十分有效。相当于在控件之间添加了一个空的控件。详细的用法与addStrech类似,参考以上使用即可。

    21.7K21

    【Qt学习笔记】3.布局

    一、手动布局 布局,Layout,就是把各个控件放在合适的位置,占据适当大小的空间。 在Qt中,使用布局器QLayout进行布局,QLayout本质上是一个工具类。...1、它为我们自动计算各个控件的大小和位置 2、当父窗口调整时,它根据既定策略Policy来调整各个子窗口的大小和位置 两个常用的QLayout类: 1、QHBoxLayout:横向布局 2、QVBoxLayout...这时发现一个问题: QLineEdit类型的子窗口只会改变宽度,而高度永远是固定的, 而QPlainTextEdit类型的子窗口宽度、高度都会跟着改变。...原因在于,这两个不通类型窗口的行为方式(Policy)是不同的 下面简单介绍几个属性: SizePolicy: 前面提到过,表示窗口的行为方式 用于描述一个窗口(Widget)被调整大小(resizing...分别为Fixed和Expanding) SizeHint: 表示窗口的推荐大小 注意这个大小仅仅是推荐大小而不是最终大小 最终的实际大小是由布局器(QLayout)通过行为方式(SizePolicy)决定的

    1.7K10

    Qt入门-layout布局

    在设计一个界面之前,应该考虑到开发的界面可能给不用的用户使用,而用户的屏幕大小、纵横比例、分辨率可能不同,界面还可能是可缩放的,程序应该可以适应这些变化。        ...前面的程序中都是使用setGeometry()方法定位控件的位置,这个方法比较笨拙。试想如果控件很多,布局这些控件需要编写大量的代码。幸运的是,QT提供了更好的方法布局控件。        ...常用的三种布局方法: (1)使用水平布局类QHBoxLayout; (2)使用垂直布局类QVBoxLayout; (3)使用网格布局类QGridLayout。 这三种方法可以嵌套使用。...控件在布局时可以先不指定父窗口,最后交由Layout统一指定。...QGridLayout的常用方法 (1)addWidget: [cpp] view plaincopy //放置一个控件到一个单元格 void    addWidget ( QWidget

    2.5K20

    Qt 常用类 (9)—— QWidget

    而 QWidget 类则同时继承了 QObject 类 和 QPaintDevice 类,也就是说,窗口类都是 Qt 对象类。...顶级窗口一定是独立窗口,但独立窗口不一定是顶级的,它可以有父窗口,当父窗口被析构时它也会随之被析构。独立窗口一般有自己的外边框和标题栏,可以有移动、改变大小等操作。        ...而下面这个函数可以得到窗口的父窗口: [plain] view plaincopy QWidget *parentWidget() const;    // 得到父窗口           窗口标题...,坐标全部是外边框几何参数,而大小全部是客户区几何参数。...这里要注意的是,setVisible 函数实际上设置的是窗口是否隐藏,而不是可见性。可见性与隐藏有如下关系。         1)隐藏的窗口一定是不可见的。

    4.3K10

    6.Layout Management(布局管理)

    绝对位置 我们可以使用setGeometry() 方法设置widget在窗体上的位置和大小 import sys from PyQt4 import QtGui def window(): app...自动布局 PyQt 提供一种方便的自动的布局方式,他可以 窗体上的widget会随着窗体的大小改变而自动改变 确保不同设备不同分辨率有同意的显示 更改某个widget不用重新设计代码 如下为一些常用的布局方式...我们可以将widget 放在制定的行和列中 可选的 我们还可以扩展行和列的大小,这样可使其相对于其他的widget更高和宽 它有如下方法 addWidget(QWidget, int r, int c...2.3 QFormLayout 该布局可以让我们很方便的创建一个表单布局 即只有两列的网格布局 第一列为label 第二列为输入框 它有如下3个方法 addRow(QLabel, QWidget) 增加包含...label和input的一行 addRow(QLabel, QLayout) 在第二列增加一个Layout addRow(QWidget) 增加一个widget,该widget扩展在两列 应用举例 代码很简单

    99420

    11.QT-布局管理器(Box,Grid,Form,Stacked)

    布局管理器简介 QT中提供了对界面组件进行布局管理的类,用于对界面组件进行管理, 能够自动排列窗口中的界面组件 窗口大小变化后,便会自动更新界面组件的大小。...布局管理器可以自定义,从而达到更加个性化界面布局的效果 布局管理器可以相互嵌套,完成所有常用的界面布局 QLayout是Qt中布局管理器的抽象基类,如下图所示: ?...QFormLayout表单布局 以表单的方式管理界面组件,专为标签和字段(组件)的形式创建的 表单布局也支持嵌套,可以管理子布局 常用函数: addRow ( QWidget * label, QWidget...* field ); addRow ( QWidget * label, QLayout * field ); addRow ( const QString & labelText, QWidget...QStackedLayout栈式布局 将所有组件进行垂直管理 并且每次只能有一个组件现在在屏幕上  只有最顶层的组件才会被最终显示 常用于图片播放,安装向导等 特点 组件大小一致且充满父组件的显示区 能够自由切换需要显示的组件

    2.4K30

    sizeHint() minimumSizeHint() sizePolicy() 的使用

    但是 widget 的大小的确定还有其它因素作用,下面会讲到。现在只需知道 sizeHint() 会返回一个被推荐的尺寸。那么这个尺寸的取值是怎样的呢?...widget 大小的一个参考。...(112, 45); 输出结果中第二行:sizeHint() 返回 layout 的首选尺寸(97,45)供 widget 参考; 输出结果中第三行:中间 button 的实际大小; 从输出结果中可以证明以上说过的两点...的 minimumSize() 函数返回;前者的实现会根据 layout 的种类的变化而变化,比如在 QHBoxLayout 和 QVBoxLayout 中各放置同样的两个 QPushButton,两者的...QSizePolicy::Expanding 的区别:两者都可以伸展和收缩,但是区别在于谁可以伸展地更牛B 1: QWidget *widget = new QWidget; 2: QHBoxLayout

    2.7K10

    【从零开始的Qt开发指南】(十二)Qt 布局管理器终极指南:5 大布局 + 实战案例,搞定所有界面排版需求

    如果直接用setGeometry或move进行 “绝对定位”,不仅控件位置计算繁琐,还无法自适应窗口大小调整 —— 这时候,Qt 的布局管理器(Layout)就能完美解决问题!...而 Qt 的布局管理器带来了三大核心优势: 自适应窗口缩放:窗口放大 / 缩小时,控件自动调整尺寸和位置,无需手动修改代码; 统一间距与边距:自动管理控件之间的间距和控件与窗口的边距,界面更整洁; 支持复杂嵌套...(int size) 在布局中添加固定大小的空白 手动调整局部间距 addStretch(int stretch = 1) 添加拉伸因子,占据多余空间 控件对齐(如靠右、靠下) setStretchFactor...,实现复杂界面分层(如 “垂直布局包含水平子布局”); 容器绑定:布局必须绑定到一个容器控件(如QWidget),否则无法生效 —— 容器的大小变化会驱动布局重新计算。...3.1 核心属性与 API 垂直布局的核心属性继承自QLayout,重点关注以下实用 API: API 方法 功能说明 实用场景 addWidget(QWidget *widget, int

    79620

    QT实现机器视觉最常用的图像查看器(源码)

    2、QT视图模型介绍 在我们常规认知里,例如显示一张图像,那只需要一个QWidget(也可以说是画布),然后我们将图像显示在QWidget上(也可以说画在画布上),就完成了,只需要两个对象,一个图像,一个...在网上的一段对三者的描述非常好: Scene就好比天空,无限大,而Item就是天空中的云朵,可以有很多云,而view就好比一扇窗户,透过窗户可以看到天空中的云,而一片天空可以通过很多扇窗户去看。...); 运行效果如下: 效果并不是我们预想的那样,有几个问题: 背景颜色不是我们想要的黑白格或者是任何其它样式,但实际上背景是可以自定义绘制的 图像元素的尺寸没有放大适配我们的窗口界面 双击窗口界面,图像元素不能居中显示...所以想实现我们文章开头的预期效果,并不是这么几行就可以搞定的,我们需要重写QGraphicsView类,实现我们预期的自定义功能,例如双击鼠标事件,背景绘制等等。..., scaleFactor); } //图片自适应方法,根据图像原始尺寸和当前视觉窗口的大小计算出应缩放的尺寸,再根据已经缩放的比例计算还差的缩放比例, //补齐应缩放的比例,使得图像和视觉窗口大小相适配

    1.8K10

    Pyqt5 关于流式布局和滚动条的综合使用

    流式布局 所谓流式布局指的是容器中的元素像流水一样,是可以浮动的,当元素一行或者一列占满的时候,它会自动流入到下一行或者下一列。...pyqt5流式布局 pyqt中采用流式布局的方法原理是,通过contentsMargins获取到子元素距离布局的上下左右宽度,然后我们将所有子元素进行遍历,如果它加上边距可以在一行放入的话,那么就放在一行内...滚动条的使用方法 首先,我们需要声明QScrollArea 然后,我们需要设置QScrollArea的位置大小 最后,我们将需要产生滚动条的元素放入它的内部。...import os from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtWidgets import ( QApplication, QLayout..., QPushButton, QSizePolicy, QWidget, QGridLayout) import sys class Window(QWidget): def __init__(

    2.1K10

    Qt 垂直布局 (QVBoxLayout)

    : addStretch();//添加一个可伸缩空间 addSpacing(int size);//添加一个固定size 大小的间距 setMargin(int);//setMargin可以设置左、...上、右、下的外边距,设置之后,他们的外边距是相同的 //与setMargin功能相同,但是可以将左、上、右、下的外边距设置为不同的值 setContentsMargins(int left, int...setDirection(QBoxLayout::RightToLeft)//设置布局方向 setStretchFactor(QWidget *w, int stretch);//设置控件、布局的拉伸系数...setStretchFactor(QLayout *l, int stretch); 增加一个可伸缩空间: this->setWindowTitle("垂直布局(QVBoxLayout)");...; pLayout->addStretch(10); pLayout->addWidget(p4); this->setLayout(pLayout); 如果要控件之间的间距相同用设置间距就可以

    98020

    Qt编写自定义控件23-广告轮播控件

    一、前言 广告轮播这个控件做的比较早,是很早以前定制一个电信客户端时候用到的,该客户端需要在首页展示轮播预先设定好的图片,图片的路径可以自由设定,然后轮播的间隔速度可以自由控制,同时该控件还需要提供两种指示器的风格...本控件很早就做好了,由于当时的QPainter功力不足,还不是很熟悉QPainter,采用的是效率比较低的直接用现有控件堆积而成,比如指示器采用的QLabel,用样式表来控制对应的形状,指示器所在的底部放一个...这种方法虽然效率低了点,但是初学者很容易理解接收,甚至可以做出更多的效果,只要项目对CPU要求不高,也不失为一种还行的办法。...二、实现的功能 1:可设置显示的图像 2:可添加多个广告 3:可设置指示器样式 迷你型样式 数字型样式 4:可设置指示器大小 5:可设置切换间隔 三、效果图 [在这里插入图片描述] [在这里插入图片描述...* 2:可添加多个广告 * 3:可设置指示器样式 迷你型样式 数字型样式 * 4:可设置指示器大小 * 5:可设置切换间隔 */ #include QWidget> class QLabel

    1.4K20

    Qt面试题(二)

    从 QWidget 类继承的所有类可以包含信号和槽 d....以上都对 33以下关于 QLayout 的描述不正确的是 a. 是的布局系统抽象基类 b. 其中属性 int margin 代表布局的外边框的宽度 c....其中属性 int spacing 代表布局内的窗口部件的大小 d. 其中属性 ResizeMode resizeMode 代表布局的扩展方式 34布局窗口部件包括 a. QHBox b....QGList 43当插入一个条目到一个集合时如下不正确的是 a. 仅拷贝指针而不拷贝条目本身的称“浅拷贝” b. 不允许只拷贝指针而不拷贝条目本身 c. 拷贝所有条目的数组到集合中是可能的 d....QDiskFont 56以下不是 Qt 支持的图像格式是 a. JPG b. PNG c. BMP d. XPM 57以下叙述正确的是 a. Qt 支持 GIF 格式图像且可以存储它们 b.

    2.8K20
    领券