Linux上的QPainter :: drawText性能不佳

我注意到在使用缩放窗口映射时,QPainter :: drawText在Linux上速度非常慢。 有什么我可以做的呢? 我已经检查了禁用抗锯齿或启用栅格渲染器是否有所作为,但事实并非如此。

例如:使用(450像素,200像素)的视口尺寸,因子100(45000,20000)的视窗尺寸,以及因子100(1400pt)放大的字体尺寸时,渲染30次文本“hello”在Linux上4(!)秒 – 都在OpenSuse和Ubuntu上。

同一个示例在Windows和Mac上快速呈现。

只是澄清:尽pipe字体大小被放大,由于所描述的窗口<>视口映射,文本在屏幕上显示为“正常”大小。

以下是我正在使用的简单示例代码:

void Widget::paintEvent(QPaintEvent *event) { const int scaleFactor = 100; QPainter painter(this); // Setup font QFont font; font.setPointSize(14*scaleFactor); painter.setFont(font); // Setup mapping painter.setWindow(0, 0, width() * scaleFactor, height() * scaleFactor); // Render the text for (int i = 0; i < 30; i++) painter.drawText(qrand() % (width() * scaleFactor), qrand() % (height() * scaleFactor), "Hello"); } 

任何帮助都是极好的。

注意:我正在使用Qt 4.8.5

这个问题是相当古老的,但作为Qt的错误仍然似乎没有得到解决在这里,我们去…

不知道这是否是一个选项,但在我工作的两个项目中,我们实现了标签,这些标签先在内部呈现为pimap / image,然后绘制。 因此,将文本缓存在透明背景的图像中可以解决问题。

我不认为这有什么不同,但是你也可以检查一下QStaticText是否对你的情况有好处的影响。

发现问题!

未安装在我的Linux系统上的FontConfig开发人员库。 这导致Qt被构建为针对XLFD,这对于缩放映射显然不起作用(参见上面的报告)。

在安装FontConfig开发库并重建Qt之后,文本现在变得很好而且快速。 在重建Qt时,我还额外地指定了“-fontconfig”参数,但是根据Qt人员,这不是必须的。