lemon写码养生 2025-06-07 14:13 采纳率: 0%
浏览 11

linux下,QT加载字体后,进行绘制时,导致占用内存瞬间上升

QT字体加载问题

环境:嵌入式linux
QT版本:5.15.0
加载字体的方式


    int fontId = QFontDatabase::addApplicationFont(fontFilePath);
    if (fontId == -1)
    {
        qWarning() << "字体加载失败:" << fontFilePath;
        return "";
    }

    QStringList families = QFontDatabase::applicationFontFamilies(fontId);
    if (families.isEmpty())
    {
        qWarning() << "无法获取字体名称:" << fontFilePath;
        QFontDatabase::removeApplicationFont(fontId);
        return "";
    }

出现的问题
在QPainter使用加载的字体去绘制文本的时候造成占用的内存瞬间上升,绘制时间且长,绘制完毕后进行字体卸载内存也需要等很久才会释放出来,是否有办法可以解决该情况?

  • 写回答

6条回答 默认 最新

  • 阿里嘎多学长 2025-06-07 14:13
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    QT字体加载问题

    你遇到的问题是,QT加载字体后,进行绘制时,导致占用内存瞬间上升。这可能是因为字体加载时,QT将字体数据加载到内存中,从而导致内存占用增加。

    解决方案:

    1. 使用 QFontDatabase::addApplicationFont 方法时,指定 QFontDatabase::HintingPreference 参数为 QFontDatabase::PreferNoHinting,以减少字体加载时的内存占用。
    QFontDatabase::addApplicationFont(fontFile, QFontDatabase::PreferNoHinting);
    
    1. 使用 QFont 对象时,设置 QFont::HintingPreference 属性为 QFont::PreferNoHinting,以减少字体渲染时的内存占用。
    QFont font;
    font.setHintingPreference(QFont::PreferNoHinting);
    
    1. 如果你使用的是 QTextDocument 对象,尝试使用 QTextDocument::setFont 方法时,指定 QFont 对象的 QFont::HintingPreference 属性为 QFont::PreferNoHinting
    QTextDocument doc;
    QFont font;
    font.setHintingPreference(QFont::PreferNoHinting);
    doc.setFont(font);
    
    1. 如果以上方法不起作用,可以尝试使用 QFontDatabase::removeApplicationFont 方法来卸载字体,以释放内存。

    这些方法可以帮助你减少字体加载时的内存占用,但是需要根据你的具体情况进行调整。

    评论

报告相同问题?

问题事件

  • 创建了问题 6月7日