Qt 界面上控件自适应窗体大小 - 随窗体缩放

Qt 界面上控件自适应窗体大小 - 随窗体缩放

  • 引言
  • 一、在Qt Designer上设置
  • 二、参数详解
  • 三、参考链接

引言

在这里插入图片描述
添加布局,设置控件的minimumSizemaximumSizesizePolicy可以使其跟随窗体进行自适应缩放 - 如上图所示。

一、在Qt Designer上设置

在代码中设置效果一致,可参考最后Qt自动生成的布局源码

    1. 加入控件,设置窗体为栅格布局:
      在这里插入图片描述
    1. 默认minimumSizemaximumSize没有限制,但是不同控件的sizePolicy属性会不一样,比如lineEdit默认水平可扩展 (Expanding),垂直方向不变(Fixed). 想达到上图效果,所有控件的sizePolicy策略设置为Preferred即可
      在这里插入图片描述
    1. 自动生成的UI源码
#ifndef UI_WIDGET_H
#define UI_WIDGET_H#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QWidget>QT_BEGIN_NAMESPACEclass Ui_Widget
{
public:QGridLayout *gridLayout;QPushButton *pushButton;QComboBox *comboBox;QLabel *label;QLineEdit *lineEdit;void setupUi(QWidget *Widget){if (Widget->objectName().isEmpty())Widget->setObjectName(QString::fromUtf8("Widget"));Widget->resize(433, 171);gridLayout = new QGridLayout(Widget);gridLayout->setSpacing(6);gridLayout->setContentsMargins(11, 11, 11, 11);gridLayout->setObjectName(QString::fromUtf8("gridLayout"));pushButton = new QPushButton(Widget);pushButton->setObjectName(QString::fromUtf8("pushButton"));QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);sizePolicy.setHorizontalStretch(0);sizePolicy.setVerticalStretch(0);sizePolicy.setHeightForWidth(pushButton->sizePolicy().hasHeightForWidth());pushButton->setSizePolicy(sizePolicy);gridLayout->addWidget(pushButton, 0, 0, 1, 1);comboBox = new QComboBox(Widget);comboBox->setObjectName(QString::fromUtf8("comboBox"));sizePolicy.setHeightForWidth(comboBox->sizePolicy().hasHeightForWidth());comboBox->setSizePolicy(sizePolicy);comboBox->setEditable(false);comboBox->setCurrentText(QString::fromUtf8(""));gridLayout->addWidget(comboBox, 0, 1, 1, 1);label = new QLabel(Widget);label->setObjectName(QString::fromUtf8("label"));label->setAlignment(Qt::AlignCenter);gridLayout->addWidget(label, 1, 0, 1, 1);lineEdit = new QLineEdit(Widget);lineEdit->setObjectName(QString::fromUtf8("lineEdit"));QSizePolicy sizePolicy1(QSizePolicy::Preferred, QSizePolicy::Preferred);sizePolicy1.setHorizontalStretch(0);sizePolicy1.setVerticalStretch(10);sizePolicy1.setHeightForWidth(lineEdit->sizePolicy().hasHeightForWidth());lineEdit->setSizePolicy(sizePolicy1);lineEdit->setAlignment(Qt::AlignCenter);gridLayout->addWidget(lineEdit, 1, 1, 1, 1);retranslateUi(Widget);QMetaObject::connectSlotsByName(Widget);} // setupUivoid retranslateUi(QWidget *Widget){Widget->setWindowTitle(QApplication::translate("Widget", "Widget", nullptr));pushButton->setText(QApplication::translate("Widget", "PushButton", nullptr));label->setText(QApplication::translate("Widget", "TextLabel", nullptr));lineEdit->setText(QApplication::translate("Widget", "LineEdit", nullptr));} // retranslateUi};namespace Ui {class Widget: public Ui_Widget {};
} // namespace UiQT_END_NAMESPACE#endif // UI_WIDGET_H

二、参数详解

更多详细信息可参考Qt帮助手册或参考链接.

    1. 控件以及窗体sizePolicy详解
      sizeHint()包含控件的建议大小,实际大小与布局以及其他控件有关
常量详解
QSizePolicy::Fixed0只能通过sizeHint()改变,因此控件永远不会增长或收缩(例如按钮的垂直方向)
QSizePolicy::MinimumGrowFlagsizeHint()是最小值,不能小于sizeHint()提供的大小,控件可以扩展,
QSizePolicy::MaximumShrinkFlagsizeHint()是一个最大值,不能大于sizeHint()提供的大小。如果其他控件需要空间(例如分隔线),则可以任意收缩。
QSizePolicy::PreferredGrowFlag | ShrinkFlagsizeHint()就是最优的,仍可以放大缩小
QSizePolicy::ExpandingGrowFlag | ShrinkFlag | ExpandFlagsizeHint()是合理的,可以缩小,但会获取尽可能多的空间
QSizePolicy::MinimumExpandingGrowFlag | ExpandFlagsizeHint()最小,但会获得尽可能多的空间
QSizePolicy::IgnoredShrinkFlag | GrowFlag | IgnoreFlagsizeHint()被忽略。会将获得尽可能多的空间。
    1. 枚举PolicyFlag详解
常量详解
QSizePolicy::GrowFlag1受sizeHint()约束,但控件可扩展
QSizePolicy::ExpandFlag2受sizeHint()约束,控件尽可能优先扩展
QSizePolicy::ShrinkFlag4受sizeHint()约束,但控件可缩小
QSizePolicy::IgnoreFlag8不受sizeHint()约束,会获得尽可能多的空间

三、参考链接

Qt界面设计时使各控件依据窗口缩放进行自适应填充的方法——使用布局、Spacer等控件:https://blog.csdn.net/m0_46577050/article/details/134350175
QT sizeHint 及 Policy的用法:https://blog.csdn.net/qq_40732350/article/details/86703749

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML.

HTML:超文本标记语言&#xff08;Hyper Text Markup Language&#xff09; 超文本&#xff1a;不同于普通文本&#xff0c;可以定义图片&#xff0c;音频&#xff0c;视频等内容 标记语言&#xff1a;由标签构成的语言 HTML标签都是预定义好的HTML代码直接在浏览器中运行&#…

JVM之【运行时数据区】

JVM简图 运行时数据区简图 一、程序计数器&#xff08;Program Counter Register&#xff09; 1.程序计数器是什么&#xff1f; 程序计数器是JVM内存模型中的一部分&#xff0c;它可以看作是一个指针&#xff0c;指向当前线程所执行的字节码指令的地址。每个线程在执行过程中…

深度神经网络——什么是生成式人工智能?

1.引言 生成式人工智能最近引起了很大的关注。 该术语用于指依赖无监督或半监督学习算法来创建新的数字图像、视频、音频和文本的任何类型的人工智能系统。 麻省理工学院表示&#xff0c;生成式人工智能是过去十年人工智能领域最有前途的进展之一。 通过生成式人工智能&#…

AI智能体|手把手教你使用扣子Coze图像流的文生图功能

大家好&#xff0c;我是无界生长。 AI智能体&#xff5c;手把手教你使用扣子Coze图像流的文生图功能本文详细介绍了Coze平台的\x26quot;图像流\x26quot;功能中的\x26quot;文生图\x26quot;节点&#xff0c;包括创建图像流、编排文生图节点、节点参数配置&#xff0c;并通过案例…

Layui设置table表格中时间的显示格式

1、问题概述? 【数据库中的时间格式】 【Layui中table表格默认的显示格式】 默认的格式中会显示时间的毫秒单位,但是这个毫秒有时候是不需要的。 总结:这个时候我们就需要定义table表格中的时间显示格式。 2、解决办法? 【解决后时间的显示格式】 【解决办法1:通过字符…

Linux基础 (九):Linux 进程复制与替换

各位看官&#xff0c;本篇博客干货满满&#xff0c;请耐下心来&#xff0c;慢慢吸收&#xff01;哈哈哈&#xff0c;内功一定会大增&#xff01; 目录 一、printf 函数输出问题 1.1 第1个示例代码 1.2 第2个示例代码 1.3 分析与结论 二、主函数参数介绍 三、复制进程 fo…

Android 处理音频焦点,解决音乐播放冲突的问题

1. 音频焦点是什么 在Android中&#xff0c;两个或多个 Android 应用可以同时将音频播放到同一输出流&#xff0c;系统会将所有音频混合在一起。 但是多数情况下&#xff0c;这对于用户来说是感到困惑的。为了避免多个应用的多个音频一起播放&#xff0c;Android 引入了“音频…

【百度智能体】零代码创建你的 AI 宠物助手

前言 今天给大家介绍一下百度的 AI 产品 – 百度智能体&#xff0c;在文心智能体平台你可以0代码就可以创建出属于自己的 AI 机器人&#xff0c;几乎可以选择任何你想要的领域或者行业机器人&#xff0c;进行无代码打造自己的对话助手&#xff0c;本文将介绍文心智能体&#x…

jmeter之MD5加密接口请求教程

前言&#xff1a; 有时候在项目中&#xff0c;需要使用MD5加密的方法才可以登录&#xff0c;或者在某一个接口中遇到 登录获取token后才可以进行关联&#xff0c;下面介绍下遇到的常见使用 一、第一种方法&#xff1a;使用jmeter自带的函数助手digest 选择工具&#xff0c;选择…

高效的大型语言模型适应方法:提升基础性的解决方案

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

表查询基础【mysql】【表内容 增,删,改,查询】

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;Linux_花果山~程序猿的博客-CSDN博客MySQL之旅_花果山~程序猿的博客-CSDN博客Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我…

Redis(十三) 事务

文章目录 前言事务的特性Redis事务的执行原理Redis中使用事务WATCH UNWATCH实现乐观锁 前言 前面我们学习 MySQL 的时候&#xff0c;肯定也学习了事务。事务是什么&#xff1f;给大家举个例子&#xff1a;假如我给朋友微信转账&#xff0c;我给他转了 100 块钱&#xff0c;当我…

Golang | Leetcode Golang题解之第114题二叉树展开为链表

题目&#xff1a; 题解&#xff1a; func flatten(root *TreeNode) {curr : rootfor curr ! nil {if curr.Left ! nil {next : curr.Leftpredecessor : nextfor predecessor.Right ! nil {predecessor predecessor.Right}predecessor.Right curr.Rightcurr.Left, curr.Righ…

Vue3实战笔记(46)—Vue 3高效开发定制化Dashboard的权威手册

文章目录 前言Dashboard开发总结 前言 后台管理系统中的Dashboard是一种图形化的信息显示工具&#xff0c;通常用于提供一个特定领域或系统的概况。它可以帮助用户监控和分析数据&#xff0c;快速获取重要信息。可以帮助用户监控业务状况、分析数据、获取关键信息和管理资源。…

list的模拟实现(一)

嗨喽大家好&#xff0c;时隔许久阿鑫又给大家带来了新的博客&#xff0c;list的模拟实现&#xff08;一&#xff09;&#xff0c;下面让我们开始今天的学习吧&#xff01; list的模拟实现&#xff08;一&#xff09; 1.list splice接口的使用 2.list尾插的实现 3.list的迭代…

Python编程的黑暗魔法:模块与包的神秘力量!

哈喽&#xff0c;我是阿佑&#xff0c;今天给大家讲讲模块与包~ 文章目录 1. 引言1.1 模块化编程的意义1.2 Python中模块与包的概念概述 2. 背景介绍2.1 Python模块系统模块的定义与作用Python标准库简介 2.2 包的结构与目的包的定义与目录结构包在项目组织中的重要性 3. 创建与…

【C语言】strstr函数的使用和模拟

前言 今天给大家带来一个字符串函数&#xff0c;strstr()的使用介绍和模拟实现。 模拟实现这个函数&#xff0c;可以帮助我们更深刻地理解这个函数的功能和提高解决字符串相关问题的能力&#xff0c;有兴趣的话就请往下看吧。 strstr函数介绍 函数功能&#xff1a; strstr函…

Three.js 研究:3、创建一个高科技圆环

打开Alpha混合 修改环形颜色&#xff0c;更改发光的颜色&#xff0c;更改发光的强度为2 更改世界环境灯光

如何编辑 PDF 中的文本?4个有效的编辑PDF方法

PDF 文件可以轻松打开和查看&#xff0c;但修改要复杂得多 - 尤其是在 PDF 中的文本编辑方面。 知道如何离线编辑 PDF 中的文本对于任何需要快速更改而无需在线加载文档或担心安全问题的人来说都非常有益。它使用户能够更好地控制他们的文档&#xff0c;并有更广泛的字体和图形…

着急联系媒体投稿发表文章有什么好方法?

作为一名曾经的信息宣传员,我深知在紧张的宣传节点上,急于将精心撰写的文章推向更广阔的读者群体,那种紧迫感和焦虑几乎成了常态。记得那段时间,为了能让稿件得到及时有效的曝光,我不得不亲自踏上了一场寻找媒体联系方式的“马拉松”。那时,我手头的资源有限,仅有的几个联系方式…