必要时扩展Qt接口

时间:2012-08-22 21:28:50

标签: c++ qt layout

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

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

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

提前感谢您的帮助。

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

This is how it's supposed to look

1 个答案:

答案 0 :(得分:3)

对此的修复是在显示表单时使用不同的方法。我将描述一种更有活力的方式。我已经在Windows上成功使用了这种方法,具有96和非常高的DPI模式(超过120)。

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

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

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

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

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