我注意到,当使用缩放窗口映射时,QPainter :: drawText在Linux上非常慢。我能做些什么吗?我已经检查过禁用消除锯齿或启用光栅渲染器是否有所作为,但事实并非如此。
示例:当使用视口大小为(450px,200px)时,窗口大小为因子100(45000,20000),因此字体大小按比例缩放100倍(1400pt),呈现文本的30倍“hello “在Linux上大约需要4(!)秒 - 在OpenSuse和Ubuntu上。
同样的示例在Windows和Mac上快速呈现。
只是为了澄清:虽然字体大小按比例放大,但由于所描述的窗口< - >视口映射,文本在屏幕上显示为“正常”尺寸。
以下是我正在使用的简单示例代码:
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
答案 0 :(得分:1)
这个问题已经很老了但是因为Qt bug似乎仍未解决,所以我们去...
不确定这可能是一个选项,但在我工作的两个项目中,我们实现了标签,这些标签首先在内部渲染为pimap / image然后绘制。 因此,在透明背景的图像中缓存文本可以解决问题。
我认为这不会产生任何影响,但您也可以检查QStaticText是否对您的案例中的效果产生有利影响。
答案 1 :(得分:1)
发现问题!
我的Linux系统上未安装的FontConfig开发人员库。这导致Qt针对XLFD构建,这显然不适用于缩放映射(参见上面的报告)。
安装FontConfig开发库并重建Qt后,文本现在变得美观快速。我还做了另外指定&#34; -fontconfig&#34;重建Qt时的参数,只是为了确定,但根据Qt家伙的说法,这不应该是必要的。