Linux上QPainter :: drawText的性能不佳

时间:2014-02-07 08:11:25

标签: linux performance qt text transformation

我注意到,当使用缩放窗口映射时,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

2 个答案:

答案 0 :(得分:1)

这个问题已经很老了但是因为Qt bug似乎仍未解决,所以我们去...

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

我认为这不会产生任何影响,但您也可以检查QStaticText是否对您的案例中的效果产生有利影响。

答案 1 :(得分:1)

发现问题!

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

安装FontConfig开发库并重建Qt后,文本现在变得美观快速。我还做了另外指定&#34; -fontconfig&#34;重建Qt时的参数,只是为了确定,但根据Qt家伙的说法,这不应该是必要的。