当前位置:首页 » 《资源分享》 » 正文

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

18 人参与  2024年09月09日 14:02  分类 : 《资源分享》  评论

点击全文阅读


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

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

引言

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

一、在Qt Designer上设置

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

加入控件,设置窗体为栅格布局:
在这里插入图片描述 默认minimumSizemaximumSize没有限制,但是不同控件的sizePolicy属性会不一样,比如lineEdit默认水平可扩展 (Expanding),垂直方向不变(Fixed). 想达到上图效果,所有控件的sizePolicy策略设置为Preferred即可
在这里插入图片描述 自动生成的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);    } // setupUi    void 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帮助手册或参考链接.

控件以及窗体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()被忽略。会将获得尽可能多的空间。
枚举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://zhangshiyu.com/post/157349.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 「鸢影云烟不可追」节选角色羁绊特辑‌_[徐启玄清宁南鸢]小说精彩章节分享
  • (番外)+(全书)途径一场风月结局+番外***_(商予淮宋泠音)途径一场风月结局+番外列表_笔趣阁(商予淮宋泠音)
  • (番外)+(全书)夏夏孟东程晓晓宋易(哥哥为陪红颜,害嫂子和我丧命结局+番外)全书在线_夏夏孟东程晓晓宋易免费列表_笔趣阁(哥哥为陪红颜,害嫂子和我丧命结局+番外)
  • 「重生流放,搬空仇家扶持小叔称帝」章节世界观揭秘篇‌_苏暖凌云最新后续章节在线阅读
  • 途径一场风月全书+后续+结局(宋泠音商予淮)列表_途径一场风月(宋泠音商予淮)途径一场风月全书+后续+结局在线
  • 你的谎言是座坟墓结局+番外精选作品之一(楚湘怀谢言宸)列表_你的谎言是座坟墓结局+番外精选作品之一
  • 阮望舒段允淮全书+后续+结局(段允淮阮望舒)_阮望舒段允淮全书+后续+结局(段允淮阮望舒)
  • 被白眼狼养女谋财害命后我杀疯了+后续+结局(张静周明苏梦)_(张静周明苏梦)被白眼狼养女谋财害命后我杀疯了+后续+结局列表_笔趣阁(张静周明苏梦)
  • 「闪闪发光的笨蛋」小说精彩章节免费试读_陆景方思喻谢谢后续在线阅读
  • 心伤怎续旧时情全书+后续(林悦溪叶星屿)_(林悦溪叶星屿)心伤怎续旧时情全书+后续后续免费(林悦溪叶星屿)
  • 错散对逢情难却(欧阳靖商迟叙)
  • 君若无心事事休全书+后续(叶柠柠傅司淮)列表_君若无心事事休全书+后续(叶柠柠傅司淮)君若无心事事休全书+后续在线

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1