我在桌面应用程序上工作,有时我们必须使用Windows远程桌面在虚拟机上运行才能访问。通过远程桌面运行时,字体和渐变在外观上明显降低。这些字体显然没有抗锯齿(通常是这样)。渐变会变成更大的纯色带,失去更平滑的外观。最初,我假设Windows正在这样做以提高性能,但是当我将我们的产品中的应用程序字体与其他应用程序中的应用程序字体(特别是Visual Studio)进行比较时,我发现Qt肯定是在对话框中呈现字体而QGraphicsScene
是不同的
在我的应用程序的应用程序标题栏中,我看到字体与其他应用程序标题栏的外观完全匹配,这是有道理的,因为Windows绘制了它。在我的应用程序中,对话框中的所有顶级菜单项和字体都没有消除锯齿并且看起来很糟糕。我们广泛使用QGraphicsScene
,这些字体也会降级。
我没有其他应用程序生成渐变来比较它们,但我使用Windows图像查看器通过远程桌面连接查看了高分辨率图像,它看起来和本地桌面一样好。
降级外观意味着我们在使用VM时无法为文档拍摄屏幕截图。我们还经常需要使用虚拟机和远程桌面进行演示,并且外观不适合向客户展示。在我们的行业和公司内部,使用VM而不是本地物理机器的压力越来越大,因此这成为一个更大的问题。
这两个症状让我相信Qt知道我通过远程桌面进行可视化,并且选择降低外观以支持性能。我不希望这样,或者至少我需要控制它。
我怀疑它被埋在Qt的风格/主题系统的某个地方,但是我没有运气找到线索,这些线索会指出我正确的地方对此做些什么,或者至少是一个表明是否有答案的答案它甚至可能。非常感谢任何建议。
答案 0 :(得分:0)
使用QGraphicScene
,我们有OpenGL进行渲染。对于一些虚拟机,我们主要依靠通过MS DirectX模拟OpenGL的软件,这是用于软件而不是硬件支持的渲染。最受欢迎的软件OpenGL渲染基于ANGLE。
要改进VM上的渲染,我会尝试使用建议的Qt build configurations之一为您的应用构建自定义Qt,以配置特定的Windows Qt构建。
随着Qt的发展,它变得有点混乱:哪种配置是最好的。我被告知,因为Qt 5.5 -opengl dynamic
将是大多数环境的最佳选择。我曾经使用Qt 5.3配置-opengl es2
配置并且运行良好而不降低图形但是请注意所使用的VM来自VMware而不是MS Hyper-V,由于OpenGL无法初始化,甚至不允许加载应用程序我无法让ANGLE来帮助解决这个特定的问题。
答案 1 :(得分:0)
我能够解决QGraphicsScene中的字体问题。由于我们产品的性质,图形项目的字体处理是相当专业的,并且在我刚开始Qt时很早就开发了,我已经将样式策略设置为QFont :: ForceOutline的那些字体,因为我没有&#39 ; t希望字体匹配使用任何位图字体。通过实验,我发现这种策略导致在通过远程桌面运行时字体没有消除锯齿。更改为QFont :: PreferAntialias解决了场景中字体的问题,这是一项重大且受欢迎的改进。
不幸的是,我还没有能够找到一般应用程序字体的解决方案,也没有找到渐变降级的解决方案,但至少对于字体,我还有更多的东西可以继续。我的下一步将是开始检查Qt默认在某些小部件上使用的字体,并查看它们的属性。