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代码直接在浏览器中运行&#…

一个变声器项目-GPT-SoVITS

网址 https://github.com/RVC-Boss/GPT-SoVITS 看演示功能很强大&#xff0c;而且mac上也能用&#xff0c;我还没安装&#xff0c;搜了几篇文章&#xff0c;看着安装挺详细的&#xff0c;先记录一下&#xff0c;以后没准能用到 https://blog.csdn.net/zcxey2911/article/det…

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;并通过案例…

ESP8266 Wi-Fi模块与STM32的连接教程

本文将详细介绍如何将ESP8266 Wi-Fi模块与STM32单片机连接&#xff0c;并实现无线通信功能。通过本教程的学习&#xff0c;您将能够掌握ESP8266模块的基本使用方法和STM32单片机的编程技巧&#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…

什么叫Java spring boot

Spring Boot是一个基于Spring框架的开源Java框架&#xff0c;用于简化创建独立的、生产级的Spring应用。它通过提供一系列默认配置和自动化设置&#xff0c;减少了开发人员在配置方面的工作&#xff0c;从而使得Spring应用的开发更加快速和简单。 Spring Boot的主要特点包括&a…

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

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

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

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

java —— MySQL 操作

一、常用 MySQL 语句 &#xff08;一&#xff09;创建数据库 create database 数据库名&#xff1b; 例如&#xff1a;创建一个名为 hello 的数据库 create database hello; 注&#xff1a;如果起初没有任何数据库&#xff0c;那么在建立连接的时候&#xff0c;地址 String …

oracle的cbo怎么使用cbo和rule的区别

Oracle CBO的使用与RBO的区别 一、Oracle CBO的使用 Oracle的基于成本的优化器&#xff08;CBO&#xff09;在Oracle 7中引入&#xff0c;但在Oracle 8i中才变得成熟。CBO会根据SQL语句的预计成本&#xff08;这里的成本主要指CPU和内存的使用&#xff09;来选择最优的执行计…

【OpenCV 基础知识 18】对两图像按位与操作

cvAnd是opencv的一个库函数&#xff0c;功能是计算两个数组的按位与的结果。 计算两个数组的每个元素的按位与 void cvAnd( const CvArr* src1, const CvArr* src2, CvArr* dst, const CvArr* maskNULL ); src1 第一个原数组 src2 第二个原数组. dst 输出数组 mask 操作覆盖面&…

Kafka消息丢失处理方式,消息丢失与消费失败区别和分别的处理

Kafka 消息丢失的处理方式可以从生产者、Broker 和消费者三个角度来考虑&#xff0c;以确保消息的可靠传递。以下是一些关键的处理措施&#xff1a; Kafka消息丢失处理方式 1. 生产者端的处理方式&#xff1a; 使用生产者确认&#xff08;acks配置&#xff09;&#xff1a;通…

jmeter之MD5加密接口请求教程

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

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

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

jenkins升级,涉及ssh remote执行出现Algorithm negotiation fail

问题&#xff1a;jenkins升级&#xff0c;发现自由风格job和流水线在用到ssh remote命令连接远程服务器的时候出现Algorithm negotiation fail错误。如下错误&#xff1a;1、algorithmName"server_host_key"&#xff0c;2、algorithmName"kex" com.jcraft…

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

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

【EXCEL_VBA_常用过程 函数】

结合日常工作需要&#xff0c;收录或改写相关过程及函数&#xff0c;现共享给大家&#xff0c;希望能对大家有所帮助&#xff01; 目录 1. 过程 1.1 批量处理框架Application.GetOpenFilename 2. 功能函数 2.1 字符串数组比对 / 两组数据比对是否一致&#xff08;不要求元素…