Linux上QPainter :: drawText的性能不佳

Fab*_*ian 5 linux performance qt text transformation

我注意到,当使用缩放窗口映射时,QPainter :: drawText在Linux上非常慢.我能做些什么吗?我已经检查过禁用消除锯齿或启用光栅渲染器是否有所作为,但事实并非如此.

示例:当使用视口大小(450px,200px)时,窗口大小为因子100(45000,20000),因此字体大小按比例缩放100倍(1400pt),渲染文本"hello"的30倍左右在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");
}
Run Code Online (Sandbox Code Playgroud)

任何帮助都是极好的.

注意:我使用的是Qt 4.8.5

Fab*_*ian 1

发现问题了!

我的 Linux 系统上未安装 FontConfig 开发人员库。这导致 Qt 是针对 XLFD 构建的,这显然不能很好地处理缩放映射(请参阅上面的报告)。

安装 FontConfig 开发库并重建 Qt 后,文本现在渲染得又好又快。为了确定起见,我在重建 Qt 时另外指定了“-fontconfig”参数,但根据 Qt 人员的说法,这不是必需的。