Qt designer的使用、布局和一些注意点

本文探讨了Qt Designer在创建GUI界面时如何有效地进行布局管理,包括控件添加、属性设置、信号与槽的连接。通过实例解析了垂直布局、水平布局、网格布局、表格布局和分割器布局的使用,并强调了在布局中添加和调整元素的注意事项,以优化开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前自己主要学的是,单片机和嵌入式。虽然也有做过APP和java等。
学了单片机和,安卓开发。其实对比了是很有类似的,单片机是有led,开关之类的外设嘛。只需要搭建内部应对逻辑和连接外设的接口。
但是,安卓呢,界面上的button,各种view就是单片机的外设了。所以,它不仅需要搭建内部逻辑和连接外设的接口,还需要建设外设。是多了一个任务(搭外设才是最简单的呀)。而Qt的这些界面上的button之类的(外设),可以通过Qt designer实现。
Qt designer能做到的有:
控件等的添加和大小、属性的设置;
整体布局和布局内的大小、属性的设置;
一些简单的、与控件有关的内部逻辑,比如信号与槽(最主要的,也应该是这个吧)。

记得之前一个兴趣群有人说过,做界面太简单了,做后台逻辑才难。而自己以前做APP,总是花很多时间在UI上,徒耗时间。所以,打算认真地学好Qt designer,把主要精力节约下来,用在后台逻辑上。
(以下只记录自己原来不懂,搞懂的点)

我用Qt designer的流程一般是:
先把需要的控件都调出来(可以同时把spacer,一种留白占地方的空间调出来),排列好了之后,就再选中这些控件(去右边对应的名字选,或者鼠标框选、长按ctrl选中都可以),然后右键设置布局。
设置布局后,可以设置布局的一些属性,比如layoutLeftMargin(即是内部的子元素到布局边界的距离)。
如果想在现有的布局里,添加新的元素的话,可以把元素拉动到布局里,当出现有蓝色的线时,就表示可以放置这个元素。但是,一般这样做,因为布局不会自动调节大小,这个布局就会缺了什么。所以,反而解除/打破布局,自己再编排,再布局就好了(注意的是,这时不要修改已经有信号—槽的控件,不然就是挖坑)。
同时,在布局里的那些元素,大小是不能调整的了,只能变化位置而已。所以,要调整元素大小的做法是:打破布局(如上)、或者调整这个布局,但是反而触及全身。最好是打破。
另外,布局中嵌套布局,是可以逐层打破的。不会全部打破(操作布局里的元素时,最方便就算是用右边的菜单对应名称)。
做好所有布局之后,需要选中所有的布局,右键界面的空白地方,把所有的布局添加到顶布

### 如何在 Qt Designer 中实现布局嵌套 #### 创建主窗口并设置初始布局 为了创建复杂的用户界面,在 Qt Designer 中可以通过组合不同的布局管理器来构建所需的结构。对于希望使用 `QGridLayout` `VBoxLayou`t 实现布局嵌套的情况,首先需要打开 Qt Designer 并新建一个窗体。 #### 添加 QGridLayout 到主窗口 接着向主窗口添加一个 `QGridLayout` 作为顶层布局。这一步骤可通过右键击空白区域选择 "Lay Out In Grid" 完成[^2]。此时整个窗体会被划分为若干行列组成的网格空间,准备接受更多组件或子布局的加入。 #### 构建 QVBoxLayout 子布局 随后可以在设计区内任意位置放置一个新的容器部件(如 GroupBox 或 Frame),该容器将承载垂直方向上的排列需求。选定此容器后应用 `Vertical Layout` 来指定其内部采用自上而下的线性分布方式[^1]。通过这种方式定义了一个局部范围内的纵向组织形式。 #### 将 QVBoxLayout 集成至 QGridLayout 完成上述操作之后,返回到最外层即包含 `QGridLayout` 的主界面上。现在可以选择之前建立好的带有 `VBoxLayout` 的容器,并将其拖放到由 `Grid Layout` 所划分出来的特定单元格内;也可以先定位好目标位置再执行 “Add to Grid” 动作以确保精确安放。这样做不仅实现了不同层次间的相互关联还保持了整体视觉效果的一致性灵活性。 #### 调整控件属性与参数配置 最后调整各个元素的具体尺寸比例以及跨越多列或多行显示等特性。例如当某个 widget 设置 colspan=3,则意味着它会在水平维度占用相邻三份的空间尽管实际可能只有两个有效项[^5]。同样地,针对具体的小部件还可以进一步微调它们各自的 margin、spacing 等样式选项直至满意为止。 ```python from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QVBoxLayout, QPushButton app = QApplication([]) window = QWidget() main_layout = QGridLayout(window) vbox_container = QWidget() # Create a container for the vertical layout inner_vlayout = QVBoxLayout(vbox_container) button_1 = QPushButton('Button 1') button_2 = QPushButton('Button 2') inner_vlayout.addWidget(button_1) inner_vlayout.addWidget(button_2) main_layout.addWidget(vbox_container, 0, 0) # Add vbox_container into grid at position (0,0) window.show() app.exec_() ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值