Qt:删除富文本

2024-05-24

对于明文有QFontMetrics::elideText (https://doc.qt.io/qt-5/qfontmetrics.html#elidedText https://doc.qt.io/qt-5/qfontmetrics.html#elidedText)。但这不适用于富文本。

我们如何在 Qt 中删除富文本?


该功能可以删除富文本。它使用一个QTextDocumet用于表示富文本和QTextCursor操作富文本。

这可能不是最有效的方法,但它似乎有效。

QString elideRichText(const QString &richText, int maxWidth, QFont font) {
    QTextDocument doc;
    doc.setTextMargin(0);
    doc.setHtml(richText);
    doc.adjustSize();

    if (doc.size().width() > maxWidth) {
        // Elide text
        QTextCursor cursor(&doc);
        cursor.movePosition(QTextCursor::End);

        const QString elidedPostfix = "...";
        QFontMetrics metric(font);
#if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0)
        int postfixWidth = metric.horizontalAdvance(elidedPostfix);
#else
        int postfixWidth = metric.width(elidedPostfix);
#endif
        while (doc.size().width() > maxWidth - postfixWidth) {
            cursor.deletePreviousChar();
            doc.adjustSize();
        }

        cursor.insertText(elidedPostfix);

        return doc.toHtml();
    }

    return richText;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt:删除富文本 的相关文章

随机推荐