QT控件QPlainTextEdit、QTextEdit與QTextBrowser的區別

一.主要功能對比

二.關鍵功能差異

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.運行效果

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/95319.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/95319.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/95319.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【思考】WSL是什么

WSL WSL是什么呢&#xff1f; WSL 是 windows subsystem for linux 的簡寫&#xff0c;指的是 windows10 的一個子系統&#xff0c;這個子系統的作用是在 windows 下運行 linux 操作系統。 有了WSL&#xff0c;就可以在 windows10 中運行linux操作系統了。許多在 linux 種運行的…

基于單片機智能飲水機/智能熱水壺

傳送門 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目速選一覽表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目功能速覽 概述 基于單片機的智能飲水機系統通過嵌入式技術實現水溫控制、水量監測及用戶交互功能。系統采用STM3…

Unity游戲打包——iOS打包基礎、傳包

本文由 NRatel 歷史筆記整理而來&#xff0c;如有錯誤歡迎指正。 相關參考文檔 Unity文檔 -> 平臺開發 -> IOS https://docs.unity3d.com/cn/2021.3/Manual/iphone.html Unity導出的Xcode 項目的結構 Modifying an Xcode project use Xcode.PBXProject. https://doc…

pyside6小項目:進制轉換器

from PySide6.QtUiTools import QUiLoader from PySide6.QtWidgets import QApplication,QWidgetclass MyWindow(QWidget):def __init__(self):super().__init__()self.ui QUiLoader().load(trans.ui)self.ui.show()#stor data type dictionaryself.lengthVar {米:100, 千米:…

再見 K8s!3款開源的云原生部署工具

前文&#xff0c;和大家分享了云原生中的核心工具 K8s&#xff1a; 關于 K8s&#xff1a;入門&#xff0c;這篇就夠了 K8s是個好東西&#xff0c;就是上手門檻有點高。這不&#xff0c;需求就來了&#xff1f; 有需求&#xff0c;就有工具。 為了解決K8s的配置難題&#xf…

C++ 快速復習指南(上半部分)

1.基礎語法基本結構#include <iostream> 頭名 using namesapce std ; 統一使用命名空間 int main () { 程序執行門戶 主題內容}基本輸出 cout << "string " << endl; // 輸出 string 變量和數據類型 格式int intger 10 ;常量的引入 需要在變量…

ArcGIS Pro 地圖打包與解包

如果需要在ArcGIS Pro 打包某一個地圖文檔&#xff0c;在 菜單欄中 點擊 共享&#xff0c;點擊地圖。彈出 打包地圖 面板&#xff0c;可以打包到Online、打包到地圖包&#xff0c;選擇將包保存到文件&#xff0c;修改項目詳細信息&#xff0c;點擊 包&#xff0c;即可實現打包。…

sunset: twilight靶場

sunset: twilight 來自 <sunset: twilight ~ VulnHub> 1&#xff0c;將兩臺虛擬機網絡連接都改為NAT模式 2&#xff0c;攻擊機上做namp局域網掃描發現靶機 nmap -sn 192.168.23.0/24 那么攻擊機IP為192.168.23.128&#xff0c;靶場IP192.168.23.145 3&#xff0c;對靶機…

【機器學習基礎】無監督學習算法的現代演進:從數據探索到智能系統的自主發現能力

1. 引言:無監督學習在人工智能革命中的核心價值 在人工智能技術飛速發展的今天,無監督學習正在成為推動AI系統實現真正智能的關鍵技術。與需要大量標注數據的監督學習不同,無監督學習能夠從原始數據中自主發現隱藏的模式和結構,這種能力使其在現代AI應用中具有不可替代的價…

PetaLinux的JTAG啟動

csdn–PetaLinux 使用技巧與緩存配置 xilinx官網–PetaLinux 工具文檔參考指南 (ug1144) xilinx官網–設備樹配置文檔 內核官網–設備樹文檔 軟硬件準備 分類項目說明/用途驗證方法示例硬件JTAG 線JTAG 下載、調試—UART 串口線查看 zynq 啟動日志—網口線用于 TFTP 下載—…

單片機中的按鍵防抖

按鈕&#xff08;按鍵&#xff09;抖動是單片機開發中常見的硬件問題&#xff0c;本質是機械觸點接觸瞬間的物理彈跳導致的電信號不穩定。消除抖動&#xff08;防抖&#xff09;是確保按鍵狀態檢測準確的關鍵&#xff0c;下面從原理到實現詳細講解。 一、按鈕抖動的原理&#x…

面經分享--小米Java一面

目錄 1.Kafka和RocketMQ的區別 2.反射的作用 3.類加載的具體過程&#xff0c;雙親委派模型的機制 4.TCP的四次揮手 5.多線程的優勢 6.死鎖產生的原因&#xff0c;怎么解決 7.Java并發的工作原理 8.常用的git命令 9.算法題 1.leetcode 3.無重復字符的最長子串&#xff…

Python在邊緣計算與物聯網中的創新實踐:實時數據處理與設備控制

近年來&#xff0c;Python語言的普及度持續攀升&#xff0c;尤其在人工智能、數據科學等熱門領域備受青睞。然而&#xff0c;一個新興趨勢——邊緣計算與物聯網&#xff08;IoT&#xff09;的結合——正悄然改變技術格局。邊緣計算強調在數據源頭進行實時處理&#xff0c;減少云…

Spring Cloud Gateway 網關(五)

目錄 一 概念引入 二 具體使用 1 首先創建一個網關模塊 2 啟動類 3 配置類 4 對應方法的修改 5 展示借助81端口進行轉發控制 6 斷言規則?編輯 三 過濾器 1 將前置的請求參數給過濾掉&#xff0c;降低繁瑣程度。 2 默認過濾器 3 全局過濾器 4 自定義過濾器工廠 5…

產品經理操作手冊(8)——業務需求文檔(BRD)

一、BRD的定義與價值 **業務需求文檔(BRD)**是產品開發前期的基礎性文檔&#xff0c;它將業務訴求轉化為結構化的產品需求&#xff0c;是連接業務方與交付團隊的橋梁。“BRD不僅是一份文檔&#xff0c;而是一個對齊的過程。”BRD核心價值 統一認知&#xff1a;確保各方對業務目…

Excel表格多級下拉選項,如何制作?

之前分享過如何設置下拉選項&#xff0c;但那只是簡單的一級下拉菜單&#xff0c;今天再給大家分享多級下拉菜單如何制作。也就是根據前面的下拉選項改變后面的選項。 我們現來復習一級下拉菜單&#xff0c;再接著講多級下拉菜單 一級下拉選項 首先我們先將表格內容湊填寫好…

[Sync_ai_vid] 唇形同步評判器 | 圖像與視頻處理器 | GPU測試

第4章&#xff1a;SyncNet唇形同步評判器 在前幾章中&#xff0c;我們了解了唇形同步推理流程如何協調生成唇形同步視頻&#xff0c;以及音頻特征提取器(Whisper)如何為LatentSync UNet提供關鍵音頻線索。 UNet利用這些線索巧妙調整唇部動作。但我們如何判斷UNet的生成效果&a…

算法:插入排序

插入排序&#xff08;直接插入排序&#xff09; 是一種基于“插入”的排序 思路 它的核心思想是把數組分成兩部分&#xff1a;一部分是有序區&#xff0c;另一部分是亂序區也就是待排序區。 每次從未排序部分“取出”一個元素&#xff0c;插入到前半部分合適的位置&#xff0c;…

MCP Go SDK

MCP Go SDK v0.3.0 Open in GitHub Codespaces &#xff08;在 GitHub Codespaces 中打開&#xff09; BREAKING CHANGES &#xff08;重大變更&#xff09; This version contains breaking changes. See the release notes for details PkgGoDev &#xff08;Go 官方包文檔入…

面試問題詳解十一:Qt中的線程池與 QRunnable

在 Qt 中&#xff0c;多線程的使用是開發高性能 GUI 應用的重要組成部分。為了避免頻繁創建和銷毀線程帶來的資源消耗&#xff0c;Qt 提供了 線程池&#xff08;QThreadPool&#xff09; 和 可運行任務&#xff08;QRunnable&#xff09; 的機制&#xff0c;幫助我們更加高效地…