Qt Quick 1.1 / QML的文本缩放效果不佳

3
我在Windows 7的电脑上使用Qt 4.8.4(MSVC 2010)开发软件应用程序。我刚刚从QWidget框架转换到QML / QtQuick 1.1声明性框架,但是我注意到在QtQuick/QML中,文本缩放效果非常差。字母经常被剪裁或稍微倾斜。

如下图所示,由于窗口大小调整,文本已被缩放,但每次都不一样。

这是我使用的缩放函数:

scale: paintedWidth > maxWidth ? Math.max((maxWidth / Math.max(paintedWidth, 1)), 0.1) : 1

基本上,这个缩放函数只在文本大于所在容器的大小时才会缩小文本。它按预期工作。
我想知道是否有可能改进QML/Qt Quick 1.1中的文本缩放,是否有其他人注意到这个问题?
我知道在QtQuick 2中已经进行了一些关于文本缩放的工作,但由于兼容性问题,目前无法升级我们的UI到QtQuick 2。 Bad QML Text Scaling
1个回答

4

首先尝试设置smooth: true

如果你正在对缩放进行动画处理,那么由于字体在不同的大小下呈现,仍然可能会注意到因hinting引起的不规则性。您可以尝试将Text元素强制转换为缓存文本到图像的代码路径,然后再进行缩放,而不是直接绘制文本:

smooth: true
style: Text.Raised
styleColor: "transparent"

你看到的出现问题的原因可能是文本没有被像素对齐,即y不是整数,或者父元素的y不是整数。


是的,你说得对,将平滑设置为true总是会使事情看起来更好一些。尽管我不太确定你所说的不像素对齐是什么意思?我通常使用锚点来布局我的QML。我想你建议的是计算缩放文本的高度,并确保它是一个整数? - stackunderflow
这不是像素对齐的:Text { y: 0.5; text: "hello" }。如果您使用锚点和整数,那么就没问题了。 - MartinJ
啊,我懂了,是的,出于这个原因,我通常总是坚持使用基于锚点的布局。 - stackunderflow
在缩放 QML 文本元素之前,我没有注意到添加 style: Text.Raised styleColor: "transparent" 会有任何区别。谢谢您的建议,我会将您的回复标记为正确,因为设置平滑确实有所帮助,虽然不如其他平台那么好,但已经更好了。我希望这个问题在 Qt Quick 2 中得到解决。 - stackunderflow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接