我注意到在使用缩放窗口映射时,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人员,这不是必须的。