2012-08-22 21 views
3

我正在开发一个Qt项目,并且我注意到一些GUI窗体的持久性问题。该表单在KDE(底部图片)和Windows上看起来很好,但是当应用程序在任何基于GNOME3的(如Unity或GNOME3本身)上运行时,窗体的某些部分将从视图中隐藏。 (顶部图片,按降序排列的单选按钮下方的所有内容都被截断)如果需要扩展Qt接口

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

到目前为止,我已经使所有受影响的表单都过大来弥补这个bug,但看起来奇怪的是,对话框要比在Windows和KDE系统中字体大小合适的KDE系统要大得多。有没有办法导致受影响的对话框/布局自行调整大小,以便在运行时正确安装?如果是这样,当部分GUI超出界限时,程序如何检测它?我宁愿不强制某种字体大小(由于视觉问题,有些人可能更喜欢大字体)。

在此先感谢您的帮助。

Part of the options gets cut off (right below Sort Ascending)

This is how it's supposed to look

+1

我不知道你是如何指定你的布局的,但是如果它不能随着对话框扩展,这听起来像是一个布局问题,至少在所有控件都可见的地方。 –

+0

Caleb Huitt最有可能是正确的。这里的布局使用有些问题。显示你如何构建UI。 – divanov

回答

3

的修复该显示形式时,使用不同的方法。我将描述一种更动态的方式。我已经成功地在Windows上使用这种方法,使用96和非常高的DPI模式(超过120)。

1. 查询操作系统并获取用户为特定系统项目选择的字体;说出用于窗口标题或系统对话框的字体。如果他们想要,也可以让用户稍后选择他们的字体。如果可能,请使用True Type字体。

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

3. 给定上述值,放置控件并根据需要动态地调整窗体的大小,并使用填充。对于按钮,您可能总是在按钮的上方和下方添加一定比例的像素以供品尝。

4. 对于像Bitmaps和jpegs这样的图形元素,再次向操作系统查询显示器的当前DPI设置,并使用更大的预制资源。当然,围绕这些元素的所有文本将被动态地放置。

请注意,在Windows上,您需要使用清单将您的exe文件标记为可识别高dpi。

+1

+1对于标签'QFontMetrics(QApplication :: font(),this).boundingRect(“My Label”)'使用当前绘画设备的像素设置返回字符串的边界框。 – cmannett85

+0

这是绝对错误的不是便携式的方法。问题是由错误构建的Qt UI引起的,使用系统特定的调用只会导致更多问题。 – divanov