lemon写码养生 2025-06-09 11:22 采纳率: 0%
浏览 9

QT获取文本的尺寸慢


    QFont font(info.strTextFont);
    qDebug() << "1.2 开始生成文本图片" << QTime::currentTime().toString("h:m:s");

    try
    {
//        font.setHintingPreference(QFont::PreferNoHinting);
        qDebug() << "1.3 开始生成文本图片" << QTime::currentTime().toString("h:m:s");
//        QFont::StyleStrategy strategy = static_cast<QFont::StyleStrategy>(QFont::PreferBitmap | QFont::NoAntialias | QFont::NoSubpixelAntialias | QFont::PreferNoShaping | QFont::NoFontMerging | QFont::ForceIntegerMetrics);
//        font.setStyleStrategy(strategy);
        qDebug() << "1.4 开始生成文本图片" << QTime::currentTime().toString("h:m:s");
        font.setPixelSize(info.nTextSize);
        qDebug() << "1.5 开始生成文本图片" << QTime::currentTime().toString("h:m:s");
        font.setBold(info.bTextBold);
        qDebug() << "1.6 开始生成文本图片" << QTime::currentTime().toString("h:m:s");
        font.setItalic(info.bTextItalic);
        qDebug() << "1.7 开始生成文本图片" << QTime::currentTime().toString("h:m:s");
        font.setUnderline(info.bTextUnderLine);
        qDebug() << "1.8 开始生成文本图片" << QTime::currentTime().toString("h:m:s");

        QFontMetrics fm(font);
        QSize textSize = fm.size(Qt::TextSingleLine, info.strText);
        qDebug() << "1.9 开始生成文本图片" << QTime::currentTime().toString("h:m:s");

在1.9阶段,获取textSize位置,花费的时间很多,其他阶段就很快,获取文字的尺寸是否还有其他方法?可以加快速度

推测点:
1、加载的字体是新字体,可能第一次加载需要时间
2、加载的字体不存在,系统去找了默认字体

  • 写回答

6条回答 默认 最新

  • 阿里嘎多学长 2025-06-09 11:22
    关注

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

    QT获取文本的尺寸慢

    你遇到的问题是,使用 QT 获取文本的尺寸(font size)时,速度较慢。这个问题可能是由于你使用了 QFont 对象来获取文本的尺寸,而 QFont 对象需要进行复杂的计算和渲染。

    一个可能的解决方案是使用 QFontMetrics 对象来获取文本的尺寸。QFontMetrics 对象可以快速地计算文本的尺寸,而不需要进行复杂的渲染。

    以下是一个示例代码:

    QFont font(info.strTextFont);
    QFontMetrics metrics(font);
    int width = metrics.width(info.strText);
    int height = metrics.height();
    

    在上面的代码中,我们首先创建了一个 QFont 对象,然后使用 QFontMetrics 对象来计算文本的宽度和高度。

    另外,如果你需要获取文本的尺寸在一个 GUI 应用程序中,你可以使用 QPainter 对象来绘制文本,并获取文本的尺寸。

    例如:

    QPainter painter;
    painter.setFont(font);
    painter.drawText(0, 0, info.strText);
    int width = painter.boundingRect().width();
    int height = painter.boundingRect().height();
    

    在上面的代码中,我们使用 QPainter 对象来绘制文本,并获取文本的尺寸。

    总的来说,使用 QFontMetrics 对象或 QPainter 对象来获取文本的尺寸可以提高性能,并且可以避免使用 QFont 对象时的性能问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 6月9日