对于明文,有QFontMetrics::elideText (https://doc.qt.io/qt-5/qfontmetrics.html#elidedText)。不过,这不适用于富文本。
我们如何省略Qt中的富文本?
发布于 2021-03-01 03:13:01
此函数可以省略富文本。它使用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;
}https://stackoverflow.com/questions/66412941
复制相似问题