了解 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 中的表单布局机制 的相关文章

  • QComboBox 下拉项边距

    我想设计我的风格QComboBox为下拉项目留出边距 现在是这样的 我想要这样的东西 我尝试过 QComboBox QAbstractItemView item margin 3px 但它不起作用 你能帮我解决这个问题吗 您想在项目之间设置
  • 在移动 Chrome 上上传图片表单失败

    我正在构建一个移动网络应用程序 其中用户手机上的图片发挥着重要作用 我有这个表单 用户可以将手机拍摄的照片上传到应用程序的数据库中 我在用着CodeIgniter上传类 https ellislab com codeigniter user
  • new 运算符(以及 malloc)无法分配约 450 MB 的内存 [重复]

    这个问题在这里已经有答案了 我正在开发一个程序 该程序在内存中存储大约 2 2 亿个短值的数组 该数据块的分配方式如下 short arrayName new short SIZE OF ARRAY 然后将文件的内容读入内存 在团队中的另一
  • QMutex 是否需要是静态的,以便此类实例的其他线程调用知道暂停其操作?

    从多个线程调用以下附加函数 我不希望数据重写附加 因为计数器尚未增加 除了当前使用 Append 的线程之外 这是否会挂起所有进入的线程 或者其他线程会继续运行而不追加数据吗 互斥锁是否需要是 静态 的 或者每个实例都知道要暂停操作吗 如果
  • 大文本输入导致 http post 失败

    我的应用程序中有一个表单 技术人员可以在其中输入有关不同事件或所采取操作 例如更新服务器 的信息 问题是这些输入可能相当长 然后我的表单就停止工作了 如果浏览器尝试发送数据 服务器会向浏览器返回 302 错误 但通常当我尝试提交时 浏览器不
  • 使用 CMake 编译时更改头文件位置会导致缺少 vtable 错误

    对于一个大型 C 项目 我需要从 qmake 过渡到 CMake 但是在处理一个玩具示例时 我遇到了一些我不理解的行为 示例代码具有单个头文件 当该头文件移动到子目录中时 我收到 MainWindow 类缺少 vtable 的错误 CMak
  • 在 Access 表单上将控件分组在一起

    我有一个 Access2003 表单 我想将多个控件组合在一起并通过 VBA 代码以编程方式更改可见性 这可能吗 我确实知道我可以通过 格式 gt 组 对项目进行分组 但如果这样做 如何在代码中引用整个组 谢谢 您可以将所有控件放置在组框控
  • 如何修复 Django 应用程序的评论视图中的此错误?

    我正在尝试用 Django 开发一个应用程序 目前 我正在尝试创建一个评论部分 供用户使用表单撰写和提交评论 我制作了一个模板 显示电影的信息以及用户可以对电影发表评论的表单 问题是 当我编写评论并尝试提交时 会出现此错误 myapp2 2
  • C++ SQL 查询构建库

    我正在寻找一个提供与 c SelectQueryBuilder 库类似功能的 c 库 http www codeproject com Articles 13419 SelectQueryBuilder Building complex a
  • 从父对象的表单创建一定数量的子对象

    谢谢Ruby on Rails 如何从表单收集子表的值 https stackoverflow com questions 2020673和 Agile Web Dev 我知道如何在一个表单中使用多个模型fields for 但我正在为这件
  • 如何在针对 Windows XP 的情况下使用 VS2012 构建 Qt 4/5?

    我正在尝试使用 Visual Studio 2012 构建 Qt 4 8 5 Qt 5 2 1 针对 Windows XP SDK v7 1a 使用 VS2102 编译时 源代码与 SDK v7 1a 存在各种不兼容性 因此无法开箱即用 这
  • 将 jstring 转换为 QString

    我正在调用一个返回字符串的 Java 函数 QAndroidJniObject obj QAndroidJniObject callStaticObjectMethod
  • 在 Qt 中使用多个不同的流读取同一文件

    使用 Qt 是否可以使用多个流读取文件以同时访问其中的不同数据部分 请注意 Qt 中的流 QTextStream QDataStream 不处理底层设备中的位置 流类只是一个包装器 用于更轻松地解析设备 QFile 实例 内的二进制数据 因
  • JavaScript 表单提交 - 确认或取消提交对话框

    对于带有询问字段是否填写正确的警报的简单表单 我需要一个执行此操作的函数 单击按钮时显示警告框 有两个选项 如果单击 确定 则提交表单 如果单击 取消 警报框将关闭 并且可以调整并重新提交表单 我认为 JavaScript 确认可以工作 但
  • 如何从 C++ 程序中重新启动 Linux?

    我有一个 Qt 4 GUI 我需要在下拉菜单中提供一个选项 允许用户选择重新启动计算机 我意识到这对于以其他方式重新启动计算机的能力来说似乎是多余的 但选择需要保留在那里 我尝试使用 system 来调用以下内容 suid root she
  • 如何在Android中使用QML - QWebView

    我想在 Android 中部署一个 YouTube 应用程序 但它只能在我的电脑上运行 在安卓上不起作用 它不加载任何视频 问题仅出在 QWebView 上 我使用了与此类似的代码 http doc qt io archives qt 5
  • Qt(在 Windows 上)将权限级别设置为“requireAdministrator”

    我正在使用 Qt Creator 并努力制作 exe文件默认以管理员身份运行 在线阅读所有解决方案我试图将这一行放入我的 pro file QMAKE LFLAGS MANIFESTUAC level requireAdministrato
  • QTabWidget 选项卡在垂直方向,但文本在水平方向

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

    如何下载 PyQt6 的 QtDesigner 如果没有适用于 PyQt6 的 QtDesigner 我也可以使用 PyQt5 的 QtDesigner 但是如何将此 ui 文件转换为使用 PyQt6 库而不是 PyQt5 的 py 文件
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap

随机推荐

  • 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的定位机