3

我正在开发一个 Qt 项目,我注意到一些 GUI 表单存在一个持续存在的问题。该表单在 KDE(下图)和 Windows 上看起来不错,但是当应用程序在任何基于 GNOME3 的设备(如 Unity 或 GNOME3 本身)上运行时,表单的某些部分会隐藏在视图之外。(上图,Sort Ascending 单选按钮下方的所有内容都被切断)

问题似乎在于 Qt 布局如何处理大字体。如果用户使用正常大小的系统字体(<= 10pt)一切正常。如果他们使用较大的字体,则表格不足以容纳所有内容。受此错误影响的其他形式只是拥挤,但这并不像重要控制超出范围那样严重。如果我放大对话框,布局不想调整自身大小以利用新空间。有没有一种简单的方法可以做到这一点,还是我需要对其进行硬编码?最初,代码阻止了在运行时调整对话框大小,但恢复该功能并不能修复错误。即使对话框可以展开,问题是布局不会随之展开。

到目前为止,我已经将所有受影响的表单都设置为超大以弥补这个错误,但是在字体大小合适的 Windows 和 KDE 系统上让对话框比它们需要的大得多看起来很奇怪。有没有办法让受影响的对话框/布局自行调整大小,以便在运行时一切都合适?如果是这样,当部分 GUI 超出范围时,程序将如何检测它?我不希望强制使用一定的字体大小(由于视力问题,有些人可能更喜欢大字体)。

提前感谢您的帮助。

部分选项被切断(就在升序排序下方)

这就是它应该看起来的样子

4

1 回答 1

3

解决此问题的方法是在显示表单时使用不同的方法。我将描述一种更动态的方式。我已经在具有 96 和非常高 DPI 模式(超过 120)的 Windows 上成功使用了这种方法。

1.查询操作系统并获取用户为特定系统项选择的字体;说出用于窗口标题或系统对话框的字体。如果他们愿意,您也可以允许用户稍后选择他们的字体。如果可能,请在执行此操作时使用 True Type 字体。

2. 使用该字体,构造一个用于标签或编辑控件的字符串对象(我不知道这对于 QT 是什么,对于 Windows 是 GetTextExtentPoint32)并将其传递给系统函数以确定宽度和您的环境的字符串高度。

3. 给定上述值,放置控件并根据需要在控件周围使用填充动态调整表单大小。对于按钮,您可能总是在按钮上方和下方添加一定百分比的像素来品尝。

4. 对于位图和 jpeg 等图形元素,再次查询操作系统以获取显示器的当前 DPI 设置,并使用更大的预制资源。自然,这些元素周围的所有文本都将动态放置。

请注意,在 Windows 上,您需要使用清单将您的 exe 标记为高 dpi 感知。

于 2012-08-23T02:57:52.700 回答