Qt 使用布局管理器,控件大小未能自适应变化

2023-10-27

问题:

        使用布局管理器管理子部件,使用了QVHlayout管理器,发现控件大小固定,即使通过拖动窗口也不能改变控件的大小,布局管理器不是自动控制部件的大小吗?为什么没有生效?

如图所示:


解决办法:

对子部件添加延申策略
setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

分析过程:

1.控件外观由 margin ,border,padding,content构成,可能是margin被拉伸了。但官方文档介绍默认 margin ,border,padding为0;即三者重合。
通过设置border-with,colo(上图红色部分)也验证了该猜想。

2.布局管理器的锅,为什么设置了伸展因子也不能拉升控件的大小?

官方文档对addWidget介绍:
void QBoxLayout::addWidget(QWidget *widget, int stretch = 0, Qt::Alignment alignment = Qt::Alignment())
        Adds widget to the end of this box layout, with a stretch factor of stretch and alignment alignment.
        The stretch factor applies only in the direction of the QBoxLayout, and is relative to the other boxes and widgets in this QBoxLayout. Widgets and boxes with higher stretch factors grow more.
If the stretch factor is 0 and nothing else in the QBoxLayout has a stretch factor greater than zero, the space is distributed according to the QWidget:sizePolicy() of each widget that's involved.

        The alignment is specified by alignment. The default alignment is 0, which means that the widget fills the entire cell.

 解释说:

        如果stretch设置为0且在布局管理器中没有比0大的伸展因子,那么布局管理器就会使用子部件提供的sizePolicy()划分空间。

官方文档对QSizePolicy::Policy解释:

      

 expanding解释:

sizeHint()是一个合理的大小,但小部件可以缩小,仍然有用。小部件可以利用额外的空间,因此它应该获得尽可能多的空间(例如,水平滑块的水平方向)。

那么试试它:

效果:

 

奇怪的事:
官方文档:

void QBoxLayout::addWidget(QWidget *widget, int stretch = 0, Qt::Alignment alignment = Qt::Alignment())

解释这个函数说:
        If the stretch factor is 0 and nothing else in the QBoxLayout has a stretch factor greater than zero, the space is distributed according to the QWidget:sizePolicy() of each widget that's involved.

        如果 stretch伸展因子设置为0,且在QBoxlayout中没有比0大的伸展因子。那么布局管理器将根据子部件设置的sizePolicy()策略划分空间。
但是我用layout->addWidget(drag_wight,0,Qt::AlignCenter),却不能自适应变化。

效果:

 代码:

 DragWidget * drag_wight = new DragWidget(this);
    DragWidget * drag_wight1 = new DragWidget(this);
    DragWidget * drag_wight2 = new DragWidget(this);
    DragWidget * drag_wight3 = new DragWidget(this);
    drag_wight->setStyleSheet("border-style: outset;border-width: 2px;border-color: red;");
    drag_wight1->setStyleSheet("border-style: outset;border-width: 2px;border-color: red;");
    drag_wight2->setStyleSheet("border-style: outset;border-width: 2px;border-color: red;");
    drag_wight3->setStyleSheet("border-style: outset;border-width: 2px;border-color: red;");

    drag_wight->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
    drag_wight1->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
    drag_wight2->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
    drag_wight3->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

    QBoxLayout *layout = new QVBoxLayout;

    //layout->setStretch()
    //drag_wight3->
    layout->addWidget(drag_wight,Qt::AlignCenter);
    layout->addWidget(drag_wight1,Qt::AlignCenter);
    layout->addWidget(drag_wight2,Qt::AlignCenter);
    layout->addWidget(drag_wight3,Qt::AlignCenter);
    layout->setMargin(5);
    layout->setSpacing(5);
    setLayout(layout);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt 使用布局管理器,控件大小未能自适应变化 的相关文章

  • C++:头文件中全局函数的多重定义错误

    该函数是全局的 在头文件中定义 暂时地我想把它留在那里 头文件还构成一个具有内联函数的特定类 其中一个函数调用this全局函数 源文件不包含任何有问题的全局函数 有关错误原因的任何提示吗 如果有人感兴趣的话我可以发布代码 mainwindo
  • 通过CMake实现Qt项目

    我正在尝试通过 Cmake 构建并运行非常简单且基本的 Qt 示例 删除 pro 文件 以下是Qt项目的代码 自动生成的Qt项目的目录结构为 Cmake my project name headers mainwindow h source
  • 如何在qt中进行异步文件io?

    我想知道如何在qt中实现异步文件io 这在普通的 qt 中是否可以实现 或者有人需要使用另一个库 例如 libuv 来实现这样的事情 我正在查看 QDataStream 但即使它是一个 流 它也不是非阻塞的 我想一种解决方案是制作一个在内部
  • 如何在 QT 中绘制点?

    我正在用 QT 用 C 编写一个应用程序 其中有 n 个点并计算它的凸包 然而 一旦计算出来 我不知道如何绘制点并绘制船体的边界 制作菜单按钮等很简单 但我不确定我是否知道执行此操作的工具 你怎么做到这一点 图形视图 addEllipse
  • 仅在发布模式下使用 glGenBuffer 时出现未处理的异常 - QT

    我在 Windows 7 上使用 Qt 4 8 发布模式编译项目时遇到了一些问题 调试时一切正常 但在发布时我收到未处理的异常 0xC0000005 访问冲突 我将范围缩小到发生这种情况的行 即生成像素缓冲区的时间 我的第一个猜测是 DLL
  • 如何使 Python、QT 和 Webkit 在无头服务器上工作?

    我有 Debian Linux 服务器 我用它来做各种事情 我希望它能够完成一些我需要定期完成的网络抓取工作 这段代码可以是在这里找到 http bit ly QeqvzX import sys from PyQt4 QtGui impor
  • Qml 和模糊图像

    我想使用 QML 实现模糊效果 我找到了有关 效果 模糊 的参考资料 例子 http qt gitorious org lscunha qt components lscunha qt components blobs d78feec567
  • 如何在 Qt Creator 中编辑 QtWebKit 的右键上下文菜单?

    好吧 这是我的困境 我正在使用 Qt Creator 制作一个使用 Webkit 的简单应用程序 我认为 Qt Creator 会有一种简单的方法来使用信号和槽编辑器编辑右键单击上下文菜单 但事实证明这不是真的 我知道 webkit 有与上
  • Qt 人工鼠标点击无法正常工作

    小玩具应用程序可以在这里找到 http gist github com 517445 http gist github com 517445 我正在尝试将人工鼠标事件发送到小部件 我使用QApplication sendEvent为此 接下
  • 如何使用 Qt DOM 通过此语法获取 xml 属性

    我正在使用 Qt DOM XML 解析器 并且遇到了如下属性定义的问题
  • new 运算符(以及 malloc)无法分配约 450 MB 的内存 [重复]

    这个问题在这里已经有答案了 我正在开发一个程序 该程序在内存中存储大约 2 2 亿个短值的数组 该数据块的分配方式如下 short arrayName new short SIZE OF ARRAY 然后将文件的内容读入内存 在团队中的另一
  • QStyledItemDelegate 绘制自定义小部件失败

    在我的一个项目中 我使用的是QTableWidget为了显示一些复杂的计算结果 为了提高表格的可读性 我需要在单个表格单元格内显示两个对齐的值 后来我想通过使用颜色或箭头等来进一步自定义小部件 为此我源自QStyledItemDelegat
  • QT:删除QGridLayout中QLabel之间的空格

    我将一些具有不同颜色的 QLabels 添加到 QGridLayout 作为 QWidget 的布局 现在我在每个 Qlabel 与下一个 Qlabel 之间有一个间距 我想将其删除 我尝试将标签的边距设置为 0 将 GridLayout
  • Retina 显示屏中具有 QOpenGLWIdget 的 Qt MainWindow 显示错误大小

    我有一个 Qt 应用程序MainWindow 我嵌入一个QOpenGLWidget在里面 一切正常 直到我开始使用 Apple Retina 显示屏并在高 DPI 模式下运行我的应用程序 我的QOpenGLWidget只是它应该具有的大小的
  • 如何在Qt 5中的paintEvent上使用mouseMoveEvent?

    我是 Qt 和 c 的新手 所以我遇到了一些困难 我正在尝试创建一个小部件 它可以获取 mouseMoveEvent 位置并在鼠标位置的像素图上绘制椭圆 下面你可以看到代码 include myimage h include
  • Qt 嵌入式触摸屏 QMouseEvents 在收到 MouseButtonRelease 之前未收到

    我在带有触摸屏的小型 ARM 嵌入式 Linux 设备上使用 Qt 4 8 3 我的触摸屏配置了 tslib 并对其进行了校准 因此 etc 中有一个 pointcal 文件 我的触摸事件的位置工作得很好 但无论如何我都会在鼠标按下或鼠标释
  • Mac OS X 上的 Qt 字体系列和样式

    我有一个基于 Qt PyQt 的 GUI 应用程序 在 Mac OS X 和其他平台 上运行 它允许用户选择字体并具有粗体和斜体选项的复选框 在更新到新的基于 Cocoa 的 Qt 时 用户发现QFontComboBox不再显示不同的字体样
  • 是否有 Qt 小部件可以浏览应用程序中小部件的层次结构(类似于 Spy++)?

    我们有一个具有复杂的小部件层次结构的应用程序 我希望能够以与 Spy 类似的方式浏览此层次结构 查看和编辑属性 例如大小 如果有一个小部件可以显示此信息 则它不需要在外部应用程序中运行 那么问题来了 这样的神兽存在吗 您可以使用Gammar
  • Qt中用于线程间通信的类设计

    问题陈述 用相机跟踪物体并相应地移动相机的方位角和仰角 Process 相机获取物体的图像 处理相机的每一帧以查找物体 应该被跟踪 并将每帧中生成的信息传递给机械设备 万向节 以平移和倾斜方式移动摄像机 Design 主 Gui 在一个线程
  • QTabWidget 选项卡在垂直方向,但文本在水平方向

    我正在尝试用 C Qt 制作一个带有这样的侧边栏的应用程序 但是当将 QTabWidget 方向设置为西时 它会使文本垂直 如何让文本位于左侧 但水平对齐 PS 我不需要图标 提前致谢 您可以使用QListWidget http doc q

随机推荐

  • vue聊天功能模块(九)艾特功能实现

    预览 艾特开始 思路 输入ctrl 弹出群成员列表弹框 点击成员时 把成员名称添加到输入框 同时隐藏弹框 1 点击弹框外任意位置 把弹框关闭即可 2 点击删除键时 把 和名称删掉 3 要实现艾特提示 输入框显示的是 某某某 实际发出去的消息
  • HttpClient 之 发送Https请求

    HttpClient包是一个优秀的Http请求的开源jar 本文Http工具类的封装基于HttpClient 封装后的工具类支持Https请求 但是由于项目的需要快速的实现 以下代码还可能会有点过时 但是要是可行的 并且相对比较简单 1 实
  • 小程序组件化开发

    前言 随着小程序的普及 越来越多的开发者开始使用小程序进行开发 而小程序的组件化开发已经成为了一种标配的开发模式 本文将深入介绍小程序组件化开发的相关知识 包括组件的定义 生命周期 通信和使用等方面 帮助大家更好地理解和使用小程序的组件化开
  • 图解SimCLR框架,用对比学习得到一个好的视觉预训练模型

    点击上方 AI公园 关注公众号 选择加 星标 或 置顶 作者 amitness 编译 ronghuaiyang 正文共 3027 字 33 图 预计阅读时间 9 分钟 导读 有点像词向量预训练模型 这个框架可以作为很多视觉相关的任务的预训练
  • [Qt] QString 和 String 字符串的相互转换

    QString gt String string str qstr toStdString String gt QString QString qstr QString fromStdString str
  • 微信支付本地调试

    经过折腾几天 找了一些资料来看 我不得不吐槽微信这个团队在做文档是如何槽糕 文档做的不好其次 接口那些总体而言 让人感觉很难受 而且给出的方案不是最优而是最麻烦的 和开发者互动很少 开放平台像是一个爱理不理的平台 这几天收集了一些问题记录一
  • 竞赛选题 基于机器视觉的银行卡识别系统 - opencv python

    1 前言 优质竞赛项目系列 今天要分享的是 基于深度学习的银行卡识别算法设计 该项目较为新颖 适合作为竞赛课题方向 学长非常推荐 更多资料 项目分享 https gitee com dancheng senior postgraduate
  • java canvas 动态画图_手把手教你用canvas画动态直线

    自己闲来无事的时候 就想学学热火了好久的H5 然后就看了下canvas 不看不知道 一看下一条 H5我以为没啥 原来都开始提供各种接口和函数了 我滴乖乖 canvas主要是用来画图的 结合定时器 setInterval 函数能够作出精美的动
  • (综述,讲得很好)基于3DMM的三维人脸重建技术总结

    深度学习全监督重建方法 由于真实的三维人脸和二维人脸图像对非常缺乏 采集成本高 很难得到真实二维三维图像对 通常将多张照片进行model fitting求解生成了对应的三维人脸模型 将其作为真值 Ground Truth 从而得到了二维三维
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • kubernetes的学习—部署 Dashboard

    部署 Dashboard Dashboard的介绍 Dashboard 仪表盘 是基于网页的 Kubernetes 用户界面 你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中 也可以对容器应用排错 还能管理集群
  • Java——第一个窗口程序

    代码演示 package Gui import java awt GUI的第一个界面 public class TestFrame public static void main String args Frame f1 new Frame
  • 加密网络空间安全厂商“观成科技”获数千万A轮融资,方广资本领投

    近日 观成科技宣布完成数千万A轮融资 方广资本领投 老股东奇安投资跟投 进化资本担任财务顾问 此次融资将主要用于进一步加大研发和技术研究的投入 持续提升产品的竞争力和服务能力 观成科技是一家致力于以守护加密网络空间安全为使命 以加密流量检测
  • Windows下Java实现语音播放

    链接 https pan baidu com s 1BhXGCBSifLxCLDsZ Q8Rpw 提取码 dgbg 64位操作系统 下载jocab 放入jdk安装目录bin目录下 Maven依赖
  • Linux上安装tenginx

    1 下载tengine http tengine taobao org download cn html 2 将文件上传到 opt tengine的目录上 tengine目录是自定义目录 3 解压包 并进入解压后的文件目录下 4 编译环境准
  • Vue弹窗 Confirm 组件

    Vue的弹窗组价 描述 有时候自己开发项目 需要使用到一些弹窗 提示框之类的东西 一般会有我们自己使用一些UI组件库 或者自己手写一个 哈哈 用别人的东西有时候挺好的 但是有时候又不好 因为业务的需求和UI的设计总是变化的很快 别人的东西难
  • 分布式系统架构网络之IDC机房

    我们开发的互联网应用被部署到IDC机房里的某个服务器上 从而完成了应用互联网的接入 所以我们接下来学习一些IDC机房的相关知识 IDC机房又被称为互联网数据中心 Internet Data Center 或者数据中心 IDC不仅是数据存储的
  • 对c语言for循环的理解

    for i lt 0 i lt 5 i 如果一直符合条件 i lt 5 那么循环到最后i 5 否则i lt 5 可根据 i 的值判断循环体是否一直满足某个条件 如下一个简单例子 判断数组是否存在某个元素 include
  • 安装 webstorm 断点调试工具 jetbrains ide support

    先下载离线插件包 http www cnplugins com devtool jetbrains ide support download html 并解压 然后进入google设置 选择开发者模式 加载扩展程序 最后如图
  • Qt 使用布局管理器,控件大小未能自适应变化

    问题 使用布局管理器管理子部件 使用了QVHlayout管理器 发现控件大小固定 即使通过拖动窗口也不能改变控件的大小 布局管理器不是自动控制部件的大小吗 为什么没有生效 如图所示 解决办法 对子部件添加延申策略 setSizePolicy