了解 Qt 中的表单布局机制

2024-01-03

Qt具有灵活且强大的布局机制来处理桌面应用程序窗口的视图。

但它是如此灵活,以至于当出现问题并需要微调时,它几乎无法被理解。而且如此强大,以至于它可以击败任何试图压倒 Qt 关于表单外观的观点的人。

那么,谁能解释一下,或者提供一下Qt的定位机制的文章或者来源吗?

我正试图强迫QLabel, QPushButton and QTableView,在名称中用下划线标记,比QTextBrowser having verticalStretch = 1以下。如何正确处理小部件的高度?


布局实际上很容易理解“我认为”。 :)
布局的简单解释可以参见QT书籍《使用 QT 进行 C++ Gui 编程第二版 https://web.archive.org/web/20090822161435/qt.nokia.com/developer/books/cpp-gui-programming-with-qt-4-2nd-edition/"

关于布局及其尺寸政策您应该注意什么

  • 大多数 Qt 小部件都有大小策略。此大小策略告诉系统小部件应如何拉伸或收缩。它来自 QSizePolicy 类。规模策略具有垂直和水平两个部分。
  • 大多数小部件也有尺寸提示。这个尺寸提示告诉系统小部件的首选尺寸
  • QSizePolicy 有一个拉伸因子,允许小部件以不同的速率增长
**I am only familiar with 4 size policies**
  • 固定大小策略 - 小部件的大小是固定的,无法拉伸。它仍保持其尺寸提示。
  • 最小尺寸策略 - 尺寸提示是小部件的最小可能尺寸,但如果需要,它_仍然可以_变大。
  • 首选尺寸策略 - 小部件可以缩小或增大到大于其尺寸提示。
  • 扩展尺寸策略 - 小部件可以缩小或增大到大于其尺寸提示:)
You may want to ask, What is the difference between preferred and expanding? **Answer:** Imagine a form with 2 widgets, one with preferred and another with expanding. Then any extra space will be given to the widget with the expanding policy. The widget with the preferred policy will remain at its size hint.

我推荐(警告:我不是专家:))你购买并阅读 "使用 QT 进行 C++ Gui 编程第二版 https://web.archive.org/web/20090822161435/qt.nokia.com/developer/books/cpp-gui-programming-with-qt-4-2nd-edition/“。我目前正在阅读它,它很有意义。看看这些图像,看看它们是否有意义。

Explaining size policies
Size policy explained

一个简单的例子
这是一个简单的对话框,有 2 个按钮,其水平和垂直尺寸策略显示为水平和垂直拉伸。

Here is the preview at its smallest size. alt text

Here is another preview at a larger size alt text

[编辑://添加尺寸提示示例]

为什么您应该关心 SIZEHINT
您可以看到每个小部件都有一个 sizeHint,这很重要,因为 QT 的布局系统始终尊重 sizeHint。仅当小部件的默认大小不完全符合您的要求时,这才会出现问题。解决这个问题的唯一方法是扩展(子类化)小部件并重新实现它sizeHint()成员函数。一个例子相当于1000字。为了节省空间,请参阅我的博客,其中有一个示例项目。

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

了解 Qt 中的表单布局机制 的相关文章

  • 如何改善 Qt5 程序的启动时间?

    我最近切换到 Qt5 我注意到与 Qt4 相比 初始化 QApplication 花费的时间明显更长 大约几分钟 仔细一看 程序似乎把时间花在了这里 Qt5Guid dll QGlobalStatic
  • Qt ObjectName() 必须是唯一的吗?

    如标题所示的简单问题 如果我打电话setObjectName 在一个对象上 它是否必须是唯一的 或者只是因为约定而推荐 我已经子类化了QLabel 并希望自动为创建的对象命名 如果这是一个坏主意 我会找到一些设置随机唯一名称的方法 我实际上
  • WooCommerce 自定义字段 - 多选

    我在 WooCommerce 的结账页面添加额外的字段 我可以添加文本框等基本字段 但需要添加一个 多 选择框 用户可以在其中选择多个项目 我已经弄清楚如何通过代码添加选择框 如下所示 add action woocommerce afte
  • 在 Qt 中构建 Android 项目不再有效

    所以我对 Android SDK NDK 和 Apache Ant 进行了一些更新 现在我无法构建任何 Android 项目 我收到一条警告 然后它说找不到 build xml 文件 错误 Warning Android platform
  • 在 ASP.Net MVC 中的同一视图中分离两个表单

    我已将创建帐户视图和登录视图合并到同一视图中 所以这是一个具有两种表单的视图 但是当我提交时它们会混合在一起 如果我尝试登录并显示错误 Html ValidationSummary 两种形式都会出现错误 我开始将字段重命名为 loginPa
  • Rails 3:f.select - options_for_select

    我的 Ruby on Rails 应用程序上有一个带有下拉菜单的表单 这是我当前的选择选项代码 根据我的理解 当有人打开页面时 这应该将 选择一个 作为默认选项 但如果他们不选择其他选项之一 那么当他们点击提交时会显示错误 在 Safari
  • 在 html 中显示表单时使用 table 标签是不是不好的设计?

    我一直听到这样的话div标签应该用于布局目的 而不是table标签 那么这也适用于表单布局吗 我知道表单布局仍然是一个布局 但似乎使用以下命令创建表单布局divs 需要更多html and css 因此 考虑到这一点 表单布局应该使用div
  • PyQt QFileDialog exec_ 很慢

    我正在使用自定义QFileDialog因为我想选择多个目录 但是exec 功能非常慢 我不明白为什么 我正在使用最新版本的 PyQt 代码片段 from PyQt4 import QtGui QtCore QtNetwork uic cla
  • 如何为 qDebug 重载运算符 <<

    我正在尝试为存储数据的类创建更有用的调试消息 我的代码看起来像这样 include
  • 如何在 django 表单中设置自定义 HTML 属性?

    我有一个 Django 表单 它是页面的一部分 假设我有一个字段 search input forms CharField u Search word required False 我只能通过模板访问它 form search input
  • 如何在 PySide/PyQt 中制作一个位于屏幕中央的小部件?

    这段代码有效 但我想知道是否有更简单的方法 def center self qr self frameGeometry cp gui QDesktopWidget availableGeometry center qr moveCenter
  • Symfony2 表单提交后刷新同一页面

    我有一个表单 其内容是从数据库创建的 在我的控制器中我有 Route HR manage projectID name hr manage public function manageHRAction Request request pro
  • C++:头文件中全局函数的多重定义错误

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

    我花了一整天的时间尝试使用QtWayland Compositor 1 0在 Qt 创建者中 我已经遵循了从那里开始的所有步骤https wiki qt io QtWayland https wiki qt io QtWayland但我收到
  • 在 4K 屏幕上使用 Matplotlib 和 TKAgg 或 Qt5Agg 后端

    我在 Ubuntu 16 04 上使用 Matplotlib 2 0 和 Python 3 6 来创建数据图 电脑显示器的分辨率为 4k 分辨率为 3840x2160 绘图数字看起来非常小 字体也很小 我已经尝试过TKAgg and Qt5
  • 另一个宏中的 Q_PROPERTY 宏

    如何放置Q PROPERTY另一个宏里面 辅助宏 define SimpleAllinOne member type public void Set member type arg member m member arg member ty
  • 如何在 QT 安装程序框架中区分每用户安装与系统范围安装?

    我正在使用一些名为 pgModeler 的应用程序 它的当前版本提供了一个基于 QT 安装程序框架的安装程序 Windows 上该安装程序的问题是它安装每个用户的开始菜单条目 https github com pgmodeler pgmod
  • 如何将 QByteArray 转换为十六进制字符串?

    我有打击QByteArray QByteArray ba ba 0 0x01 ba 1 0x10 ba 2 0x00 ba 3 0x07 我真的不知道如何将此 QByteArray 转换为结果字符串 其中包含 01100007 我将使用 Q
  • 具有多个父项的 Qt 树模型

    我想构建一棵树 其中一个元素可以引用另一个元素 我想要构建的树是 像这样的东西 A B C D E F P this is a pointer to C D first child of C E second child of C I fo
  • 使用 QTextCursor 选择一段文本

    使用 Qt 框架选择文本片段时遇到问题 例如 如果我有这个文件 没有时间休息 我想选择 ime for r 并从文档中删除这段文本 我应该如何使用 QTextCursor 来做到这一点 这是我的代码 QTextCursor cursor n

随机推荐

  • Amazon + Django 每12小时出现[Errno 5] 输入/输出错误

    我最近设置并部署了一个 Amazon EC2 实例来部署我的 django 项目 当我在浏览器中收到此错误时 我正在通过浏览器与应用程序进行交互 errno 5 input output error django 这个错误确实引用了我的应用
  • 克隆时 IE8 无法识别 Html 5 时间标签

    在这种情况下 我一直无法让 IE 识别新的时间标签 这一切在 FF 中都很有效 这是代码 var origComment articleComment first div if origComment length gt 0 var com
  • JavaScript 动态函数名

    我需要将函数的名称动态分配给关联数组的元素 这是我的尝试 但行不通 我寻求帮助的问题是在这里我尝试调用该函数 cr cmd1 x
  • 缺少函数的返回类型 - 在反应(打字稿)代码中

    在我的 App tsx 中我得到了这个 function eslint 上缺少返回类型 typescript eslint explicit function return type 在我的主类组件中 我得到了这些 方法定义中缺少可访问性修
  • Dynamics CRM 2016 本地插件 - 异常:无法加载文件或程序集“Microsoft.IdentityModel.Clients.ActiveDirectory”

    我有一个 Dynamics CRM 2016 On Prem 插件 它连接到使用 Azure AD 保护的 ASP Net Web api 端点 因此我使用图书馆Microsoft IdentityModel Clients ActiveD
  • PHP 的 MongoDB 连接器:计算分页文档数

    我正在使用MongoDB Driver Manager使用 PHP 连接到 MongoDB 驱动程序版本是1 6 14 我可以连接并进行查询 但我需要查询的文档总数才能进行分页 reg pag 20 pag GET pag mng new
  • 为什么 Tomcat 管理器使用我的 LoginModule?

    我正在运行 Tomcat 6 0 29 并创建了我自己的领域和登录模块 它们在 server xml 中定义如下
  • C 和 C++ 中枚举的用途是什么

    枚举是常量整数值的列表 可以使用它来代替使用 define 定义常量值 但除此之外 我还没有在 C 和 CPP 中发现枚举的任何实质性用途 任何人都可以让我知道枚举的确切用途是什么 最初我想如果我们创建一个枚举变量并分配一个不在枚举值中的值
  • 将对象转换为 JAXBElement

    我想实现一个返回 JAXBElement 的方法 下面是代码 XmlRootElement name history XmlAccessorType XmlAccessType FIELD public class IBHistoryInf
  • 从表单中的所有选择元素中获取所有选定的选项元素

    大家好 感谢您抽出时间回答我的问题 我有一个包含 6 个选择元素的表单 其类别为 skillLevel 我需要使用 jQuery 获取 最好是在数组中 每个选择元素的值 我怎样才能做到这一点 您可以使用map method var arr
  • HTML 钻取表:设计

    我试图找出根据标签构建 HTML 钻取表的最佳方法 它必须简单 但最重要的是它应该符合逻辑 关于如何做到这一点是否有任何首选标准 你会推荐什么 一种可能的解决方案是 colspan tbody tr td td td Summery row
  • 更改 PHP.ini 位置文件?

    我在 OSX 上使用 apache2 默认情况下php ini位置是 private etc php ini 我需要把它改成这样 Library FileMaker Server Web Publishing publishing engi
  • Delphi 2010-IDE 不断停止在 CPU 调试窗口

    我在 D2010 IDE 中不断出现 CPU 调试窗口 我注意到这出现在一些断点上 而其他一些断点则不会导致这种效果 无法解释这种情况到底何时发生或哪些断点导致这种情况 但似乎当调试器无法到达代码上的断点时 它会停止在方法的开始地址上 并且
  • 在 jar 中包含属性/配置文件是一种不好的做法吗?

    例如 MyApp 是一个 Web 应用程序 其中包含一个属性文件 server properties 该文件描述应用程序的配置数据 例如服务器名称 在开发阶段 server properties 位于其自己的 IDE 项目文件夹中 它的逻辑
  • 当终端关闭时终止 sudo python 脚本

    如何判断运行 python 脚本的终端是否已关闭 如果用户关闭终端 我想安全地结束我的 python 脚本 我可以使用处理程序捕获 SIGHUP 但当脚本作为 sudo 运行时则不行 当我使用 sudo 启动脚本并关闭终端时 python
  • 模拟内存不足警告不起作用

    我有一个UIWebView in a UIViewController 我正在尝试将此视图控制器推送到现有的UINavigationController 它有另一个视图控制器 它也有一个UIWebView在里面 推动第一个视图控制器后 我尝
  • 单击时切换 CSS3 动画

    在没有 JavaScript 的情况下 在点击时改变 CSS3 动画方向的最佳方法是什么 我最近一直在探索复选框黑客 并试图找到一种方法 只使用一组关键帧 而不是两组 一个前进 一个返回 这可能吗 或者有没有办法用一套来做到这一点 例如我有
  • 如何删除mysql数据库中的重复记录?

    使用rails或mysql查询删除mysql数据库中重复记录的最佳方法是什么 您可以通过以下方式将不同的记录复制到新表中 select distinct into NewTable from MyTable
  • 如何使用 Gradle 运行多个命名测试?

    我知道怎么说 gradle test tests mypackage MyTest 但如何指定多个呢 gradle test tests mypackage MyTest mypackage model ModelTest BasicTes
  • 了解 Qt 中的表单布局机制

    Qt具有灵活且强大的布局机制来处理桌面应用程序窗口的视图 但它是如此灵活 以至于当出现问题并需要微调时 它几乎无法被理解 而且如此强大 以至于它可以击败任何试图压倒 Qt 关于表单外观的观点的人 那么 谁能解释一下 或者提供一下Qt的定位机