对于明文有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(使用前将#替换为@)