当前位置: 首页 > news >正文

Qt Designer 中实现布局比例的方法和简单实例

一、使用布局管理器(Layout)是基础

Qt Designer 中常用的布局管理器有:

  • 垂直布局(Vertical Layout)
  • 水平布局(Horizontal Layout)
  • 网格布局(Grid Layout)
  • 表单布局(Form Layout)

可以通过右键控件 → Lay Out in ... 来应用布局。


二、实现比例的核心:使用“伸展因子”(Stretch)

在水平或垂直布局中,每个子控件默认占据等宽/等高区域。若要控制不同控件的空间占比,需调整它们的:

  • Stretch 因子
  • Size Policy

示例:水平布局中控件占比为 1:2:1

步骤:

  1. 拖入 3 个控件(例如 QPushButton)到一个水平布局(QHBoxLayout)中。

  2. 选中布局,在 属性编辑器中设置:

    • 选中每个控件,在属性栏中找到 horizontalStretch 属性:

      • 第一个控件设为 1
      • 第二个控件设为 2
      • 第三个控件设为 1
  3. 若使用代码补充(例如用 .ui 文件加载后),你可以这样设置:

ui->horizontalLayout->setStretch(0, 1);  // 第0个控件
ui->horizontalLayout->setStretch(1, 2);  // 第1个控件
ui->horizontalLayout->setStretch(2, 1);  // 第2个控件

三、Size Policy 控制控件可扩展性

对于某些控件(如 QLabel 或 QPushButton),默认 Size Policy 可能禁止它们拉伸。

常用设置:

  • Preferred:正常尺寸,可伸缩
  • Expanding:会尽量扩展填满布局
  • Fixed:尺寸固定,不伸缩

可在 Designer 中调整控件的 SizePolicy 属性:

方向设置推荐值
horizontalPreferredExpanding
verticalFixedPreferred

四、Grid Layout 中的比例设置

在网格布局中,每行/列的比例可通过 拉动边框线 来设定,但程序中可以通过如下方式:

ui->gridLayout->setColumnStretch(0, 1);  // 第0列权重为1
ui->gridLayout->setColumnStretch(1, 2);  // 第1列权重为2

五、实践小试

示例:设计一个左侧菜单栏 + 右侧显示区(比例 1:3)

  1. 拖入 QHBoxLayout

  2. 左边放一个 QWidget,右边放一个 QStackedWidget 或 QFrame

  3. 设置伸展因子:

    ui->mainLayout->setStretch(0, 1);  // 左侧菜单栏
    ui->mainLayout->setStretch(1, 3);  // 右侧内容区
    

六、使用总结技巧

方法功能
Layout → Stretch控制空间分配比例
Layout → SizePolicy控制控件是否可伸缩
布局嵌套复杂界面中常用
.ui + C++ 后端控制灵活精确设置布局行为

七、综合示例

下面是一个使用 Qt Designer 创建布局比例(如左侧1:右侧3)控制的完整项目模板,包括 .pro 工程文件、main.cppmainwindow.{h,cpp}.ui 文件的结构说明:

// QtDesignerTemplate.pro
QT += widgets
SOURCES += main.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui

// main.cpp
#include “mainwindow.h”
#include

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}

// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();

private:
Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

// mainwindow.cpp
#include “mainwindow.h”
#include “ui_mainwindow.h”

MainWindow::MainWindow(QWidget *parent)
QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 设置左侧与右侧布局比例为 1:3
ui->horizontalLayout->setStretch(0, 1); // 左侧菜单区
ui->horizontalLayout->setStretch(1, 3); // 右侧显示区

}

MainWindow::~MainWindow()
{
delete ui;
}

// mainwindow.ui(需在 Qt Designer 中创建)
// 布局结构:
// QWidget(主窗口中央区域)
// └── QHBoxLayout (objectName: horizontalLayout)
// ├── QWidget (左侧菜单区,可放按钮组)
// └── QStackedWidget 或 QFrame(右侧显示区域)


说明

  • .ui 文件中使用 QHBoxLayout 控制整体左右布局。
  • 通过代码 setStretch(0, 1)setStretch(1, 3) 控制左右子控件在水平方向的比例为 1:3。
  • 适合用于菜单+内容区分布局,例如:左侧是导航栏,右侧是主显示界面。

http://www.dtcms.com/a/508541.html

相关文章:

  • 黄埔网站建设(信科网络)找工程项目上哪个平台好呢
  • 想要提高网站排名应该怎么做直播系统开发
  • Doris专题22- 数据更新-概述
  • 立创EDA专业版使用技巧——按TAB暂停修改
  • 伊犁网站建设公司网页设计与制作实训步骤
  • 深圳网站建设外贸公司软件公司简介内容怎么写
  • 亚太稀土产链
  • 【源码+文档+调试讲解】基于SpringBoot + Vue的知识产权管理系统 041
  • 建设银行信用卡管理中心网站首页网站不换域名换空间
  • 小型企业做网站的价格图片主题wordpress
  • 【C/C++】进程
  • 如何让我们的网站新闻被百度新闻收录网站现在用h5做的吗
  • composer安装 laravel 指定版本
  • 手机购物网站建设网站后期维护包括
  • 服装 多语言 网站源码兰州网站建设和推广
  • ipad可以做网站吗忻州市住房城乡建设局网站
  • 中医养生篇
  • 响应式网站建设好么网站开发产品经理招聘
  • 北京哪家公司做网站自备服务器做网站
  • 技能短板导致任务停滞,该如何补救
  • POSIX 可移植操作系统接口规范
  • 公司网站开发费用济南兴田德润o评价沣东新城开发建设集团有限公司网站
  • 重庆网站建设子沃科技外贸网站建设优化
  • 制作网站的走马灯怎么做html网站模板怎么用
  • React Native开发有哪些优势和劣势?
  • 电商类网站开发合同书设计工作室 网站
  • 东莞网站制作与网站建设东莞关键词优化效果
  • MATLAB疑难诊疗:从调试到优化的全攻略
  • Linux Shell 中的 join 命令:高效关联数据的实用工具
  • 网站知识架构网站书店架构书怎么做