作者:小 琛
欢迎转载,请标明出处
用户界面中支持显示富文本格式(如加粗、斜体、不同颜色、超链接等)的文本内容。这种富文本的支持能够提供更加丰富和多样化的文本显示效果,从而增强用户体验。
QTextBrowser 是 Qt 框架中的一个小部件(widget),用于显示富文本和超链接文本。它是一个用于显示文本内容的可编辑小部件,支持显示富文本格式,并且可以包含超链接,允许用户点击链接来执行相关操作。
QTextBrowser 允许开发者在应用程序中以富文本的方式显示文本内容,比如格式化的文字、图像、超链接等,并且支持用户交互。它是一个非编辑的小部件,用户无法直接编辑其中的文本内容,但可以选择和复制其中的文本,并且可以点击其中的超链接来进行跳转等操作。
相较于 QTextEdit,QTextBrowser 更适用于显示只读的富文本内容,而不是用于用户编辑的目的。它也比较适合用于显示带有超链接的富文本内容,比如显示文字中的URL链接或者HTML文本中的超链接等。
在Qt应用程序中,QTextBrowser 可以用于显示格式化的帮助文档、显示静态的富文本内容、显示HTML文本等。它提供了一种简单而有效的方式,使得在界面中显示富文本内容变得更加方便和实用。
#pragma once
#include
class MyRichText2 : public QTextBrowser {
public:
MyRichText2 (const QString& text, const QFont& font, QWidget* parent = nullptr);
~MyRichText2 () = default;
void updateText(const QString& text);
int adaptiveWidth(const QString& text, const QFont& font);
protected:
void resizeEvent(QResizeEvent* event) override;
private:
QSize textSize(const QString& text, const QFont& font);
private:
QString text_;
};
#include
#include
MyRichText2 ::MyRichText2 (const QString& text, const QFont& font, QWidget* parent) : QTextBrowser(parent) {
setFont(font);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setTextInteractionFlags(Qt::LinksAccessibleByMouse);
setFocusPolicy(Qt::NoFocus);
setContextMenuPolicy(Qt::ContextMenuPolicy::NoContextMenu);
setOpenLinks(true);
setOpenExternalLinks(true);
setStyleSheet(QString("QTextBrowser{border: 0px; background-color: transparent;}"));
document()->setDocumentMargin(0);
updateText(text);
}
void MyRichText2 ::updateText(const QString& text) {
text_ = text;
setHtml(text);
document()->setTextWidth(width());
setFixedHeight(document()->size().height());
}
int MyRichText2 ::adaptiveWidth(const QString& text, const QFont& font) {
return (textSize(text, font).width() + 2);
}
void MyRichText2 ::resizeEvent(QResizeEvent* event) {
updateText(text_);
QTextBrowser::resizeEvent(event);
}
QSize MyRichText2::textSize(const QString& text, const QFont& font) {
const QFontMetrics metrics(font);
const int width = metrics.width(text);
const int height = metrics.height();
return {width, height};
}
QFont font("Microsoft YaHei, Microsoft Sans Serif");
font.setPixelSize(14);
auto title = QString("%2
")
.arg(font.name(QColor::HexArgb))
.arg(tr("Operation recorder"));
auto titleLabel = new NemuUiLib::NemuRichText2(title, font, this);
titleLabel
->setFixedWidth(titleLabel->adaptiveWidth(tr("Operation recorder"),font));
titleLabel->setAttribute(Qt::WA_TransparentForMouseEvents);