一.主要功能對比
二.關鍵功能差異
1.文本類型支持
QPlainTextEdit:
僅支持純文本(Plain Text),不處理任何格式(如字體、顏色、鏈接、圖片等)。文本以原始字符形式存儲,適合處理日志、代碼、配置文件等無需格式的內容。
例:輸入 <font color="red">文本</font> 會被當作普通字符串顯示,不會渲染為紅色文本。
QTextEdit 與 QTextBrowser:
均支持富文本(Rich Text),可解析和渲染 HTML 格式的文本(如 <b>加粗</b>、<img src="icon.png">),支持字體樣式、顏色、段落對齊、表格、圖片嵌入等格式。
例:輸入 <font color="red">文本</font> 會直接顯示為紅色文本。
2.編輯能力
QPlainTextEdit 與 QTextEdit:
默認可編輯(用戶可輸入、刪除、修改文本),可通過 setReadOnly(true) 設置為只讀模式。
QPlainTextEdit 提供基礎編輯功能(換行、撤銷 / 重做、選中復制等)。
QTextEdit 額外支持富文本編輯(如設置字體顏色、插入圖片等)。
QTextBrowser:
默認只讀(readOnly 屬性默認 true),雖然可通過 setReadOnly(false) 強制開啟編輯,但設計初衷是 “瀏覽” 而非 “編輯”,編輯體驗較差(如富文本編輯功能被弱化)。
注意:ui->textBrowser->setReadOnly(false); 設置為false也是可以編輯的
3.附加功能
QPlainTextEdit:
專注純文本效率,提供代碼編輯優化:
支持行號顯示(需配合 QTextEdit 或自定義實現)。
低延遲滾動(處理 10 萬行以上文本時,性能優于 QTextEdit)。
支持 “按列選擇”(按住 Alt 鍵拖動鼠標)。
QTextEdit:
專注富文本處理,提供格式控制接口:
通過 setFont()、setTextColor() 等方法設置文本樣式。
通過 insertHtml()、insertImage() 插入富文本內容。
支持段落對齊(左對齊、居中、右對齊)。
QTextBrowser:
專注文本瀏覽與交互,擴展導航功能:
支持超鏈接(<a href="xxx">鏈接</a>),點擊鏈接可觸發 anchorClicked 信號(如跳轉到其他頁面)。
內置 “前進 / 后退” 導航(forward()、backward() 方法),類似瀏覽器歷史記錄。
可加載本地 HTML 文件(setSource(QUrl) 方法),適合展示幫助文檔。
三.選擇指南
只需要顯示純文本或日志 → 選擇 QPlainTextEdit
需要富文本編輯功能 → 選擇 QTextEdit
需要顯示富文本內容但不需編輯 → 選擇 QTextBrowser
處理大量文本(>10,000行) → 優先選擇 QPlainTextEdit
需要超鏈接功能 → 選擇 QTextEdit 或 QTextBrowser
需要文本瀏覽歷史 → 選擇 QTextBrowser
- 測試代碼示例
1.代碼
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
????: QMainWindow(parent)
????, ui(new Ui::MainWindow)
{
????ui->setupUi(this);
????//可讀、可寫設置
????//ui->textEdit->setReadOnly(true);
????//ui->plainTextEdit->setReadOnly(true);
????ui->textBrowser->setReadOnly(false); ??//默認就是只讀的,false就是可寫的
//設置等寬字體,便于對齊
????QFont font("Lucida Console", 10); ?//等寬字體 ?//粗一點
????//QFont font("Courier New", 10); ??// 等寬字體 ??//字體很細
????ui->textBrowser->setFont(font);
????ui->textEdit->setFont(font);
????ui->plainTextEdit->setFont(font);
//顯示數據
????QString tem = QString::number(1236).rightJustified(10, ' ');
????ui->textBrowser->append(tem);
????ui->textEdit->append(tem);
????ui->plainTextEdit->appendPlainText(tem);
????tem = QString::number(123567).rightJustified(10, ' ');
????ui->textBrowser->append(tem);
????ui->textEdit->append(tem);
????ui->plainTextEdit->appendPlainText(tem);
????tem = QString::number(12).rightJustified(10, ' ');
????ui->textBrowser->append(tem);
????ui->textEdit->append(tem);
????ui->plainTextEdit->appendPlainText(tem);
//網頁格式方式,plainTextEdit不支持;語句自動換行
????tem = "<font color=\"red\">QT軟件</font> <b>QT測試</b>";
????ui->textBrowser->append(tem);
????ui->textEdit->append(tem);
????ui->plainTextEdit->appendPlainText(tem);
????tem = "<font color=\"red\">QT軟件</font> <b>QT測試</b>";
????ui->textBrowser->append(tem);
????ui->textEdit->append(tem);
????ui->plainTextEdit->appendPlainText(tem);
????tem = "<span style=\"color: red; font-weight: bold;\">QT軟件</span> "
???????????????????????"<span style=\"color: red; font-weight: bold;\">QT測試</span>";
????ui->textBrowser->append(tem);
????ui->textEdit->append(tem);
????ui->plainTextEdit->appendPlainText(tem);
//三個控件都可以用的寫入格式字符串的通用方法
????insertFormattedText(ui->textBrowser, "\r\nTest Result:", Qt::black, true, false); //需要前面加入\r\n 手動換行
????insertFormattedText(ui->textEdit, "\r\nTest Result:", Qt::black, true, false);
????insertFormattedText(ui->plainTextEdit, "\r\nTest Result:", Qt::black, true, false);
}
void MainWindow::insertFormattedText(QTextEdit *editor, const QString &text,
?????????????????????????????????const QColor &color,
?????????????????????????????????bool bold,
?????????????????????????????????bool italic)
{
????QTextCursor cursor = editor->textCursor();
????QTextCharFormat format;
????QTextCharFormat originalFormat = cursor.charFormat();
????// 移動到文檔末尾
????cursor.movePosition(QTextCursor::End);
????// 設置文本顏色
????format.setForeground(color);
????// 設置加粗
????format.setFontWeight(bold ? QFont::Bold : QFont::Normal);
????// 設置斜體
????format.setFontItalic(italic);
????// 應用格式
????cursor.mergeCharFormat(format);
????// 插入文本
????cursor.insertText(text);
????// 恢復默認格式(可選)
????cursor.setCharFormat(originalFormat);
????// 將修改后的光標設置回編輯器
????editor->setTextCursor(cursor);
}
void MainWindow::insertFormattedText(QPlainTextEdit *editor, const QString &text,
?????????????????????????????????????const QColor &color,
?????????????????????????????????????bool bold,
?????????????????????????????????????bool italic)
{
????QTextCursor cursor = editor->textCursor();
????QTextCharFormat format;
????QTextCharFormat originalFormat = cursor.charFormat();
????// 移動到文檔末尾
????cursor.movePosition(QTextCursor::End);
????// 設置文本顏色
????format.setForeground(color);
????// 設置加粗
????format.setFontWeight(bold ? QFont::Bold : QFont::Normal);
????// 設置斜體
????format.setFontItalic(italic);
????// 應用格式
????cursor.mergeCharFormat(format);
????// 插入文本
????cursor.insertText(text);
????// 恢復默認格式(可選)
????cursor.setCharFormat(originalFormat);
????// 將修改后的光標設置回編輯器
????editor->setTextCursor(cursor);
}
2.運行效果