【Qt】QTextEdit/QPlainTextEdit 實現 Tab 鍵多行縮進與反縮進

【Qt】QTextEdit/QPlainTextEdit 實現 Tab 鍵多行縮進與反縮進

文章目錄

    • I - 主要原理
    • II - 代碼實現
      • 2.1 - 自定義類
      • 2.2 - 實現 Tab 縮進
      • 2.3 - 實現反縮進
    • III - 參考鏈接

I - 主要原理

由于 QTextEdit 和 QPlainTextEdit ,都無法實現多行選中縮進與反縮進,選中多行后,按下縮進或反縮進,選中文本都會清空,并替換為(反)縮進或空格。因此會造成使用很不方便和低效的問題。

需要實現一個類繼承自 QTextEdit 或 QPlainTextEdit 類并重寫其 keyPressEvent 接口,處理 Tab 按鍵

II - 代碼實現

2.1 - 自定義類

自定義類 TextEdit,視使用目的繼承 QTextEdit 或 QPlainTextEdit,

#include <QTextEdit>
// 或 #include <QPlainTextEdit>class TextEdit : public QTextEdit
// 或 class TextEdit : public QPlainTextEdit
{Q_OBJECT
public:explicit TextEdit(QWidget* parent = nullptr);protected:void keyPressEvent(QKeyEvent *e) override; // 鍵盤事件// 添加 override 編譯時檢查是否重寫父類函數,防止敲錯
private:// 根據是否保留制表符,設置為 \t 或空格QString m_indentation = "\t"; // 或 "    "
}

2.2 - 實現 Tab 縮進

需要包含頭文件

#include <QTextCursor> // 獲取光標實例
#include <QTextBlock> // 文本塊
void TextEdit::keyPressEvent(QKeyEvent* e)
{// 判斷 Tab 按鍵 以及排除 Shift, Ctrl, Alt 等控制按鍵的情況,因為通常通過 Shift + Tab 實現反縮進if (Qt::Key_Tab && Qt::NoModifier == e->modifiers()){// 獲取光標實例QTextCursor cursor = textCursor();// 在無選中的情況下僅插入一個縮進,并返回if (!cursor.hasSelection()){insertPlainText(m_indentation);return;}  // 記錄光標選中內容的開始和結束位置 spos(start position), epos(end position)int spos = cursor.anchor();int epos = cursor

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

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

相關文章

[Redis]——Redis命令手冊set、list、sortedset

&#x1f333;List類型常見命令 LPUSH / RPUSH [KEY] [element] …… 向列表左側或者右側插入一個或多個元素 LPOP / RPOP [key] 刪除左邊或者右邊第一個元素 LRANGE [key] start end 返回索引start到end的元素&#xff08;索引從0開始&#xff09; BLPOP / BRPOP [key] [等…

【C++】類的默認成員函數(上)

&#x1f525;博客主頁&#xff1a; 小羊失眠啦. &#x1f3a5;系列專欄&#xff1a;《C語言》 《數據結構》 《C》 《Linux》 《Cpolar》 ??感謝大家點贊&#x1f44d;收藏?評論?? 文章目錄 一、默認成員函數二、構造函數構造函數的概念及特性 三、析構函數析構函數的特性…

續簡單學生管理系統、包裝類--day18

Day18 一、刪除的思考題 思考題&#xff1a;刪除功能可以省略第一步嗎&#xff1f;不可以 有第一步判斷學生信息合法性&#xff0c;如果信息不合法會直接結束返回 如果沒有第一步&#xff0c;將會在第二步判斷是否有該學生query循環匹配查找&#xff0c;數據量大情況&#xff…

藍橋杯倒計時 43天 - 前綴和,單調棧

最大數組和 算法思路&#xff1a;利用前綴和化簡 for 循環將 n^2 簡化成 nn&#xff0c;以空間換時間。枚舉每個 m&#xff0c;m是刪除最小兩個數&#xff0c;那k-m就是刪除最大數&#xff0c;m<k&#xff0c;求和最大的值。暴力就是枚舉 m-O(n)&#xff0c;計算前 n-(k-m)的…

PCSA時鐘控制集成之時鐘門控級別

這一部分描述了&#xff1a; ? 時鐘門控的級別。 ? 實現最大效果的時鐘門位置。 ? 實現有效和高效時鐘門控的集成方法。 時鐘樹是由時鐘緩沖器構建的&#xff0c;這些緩沖器在時鐘源&#xff08;時鐘輸入或PLL&#xff09;與時鐘終端&#xff08;寄存器或RAM&#xff09…

ULN2003(COM的作用)

單路內部電路原理圖 三極管多級放大電路&#xff0c;最大可達到500ma&#xff1b; 典型應用&#xff1a; ULN2003屬于灌電流驅動方式&#xff1b;輸入與輸出電平反向&#xff0c;下拉4K電阻&#xff0c;為解決單片機上電IO瞬間不穩定&#xff1b; COM端 1.可懸空&#xff1a…

Java面題總結7

spring事務什么時候會失效 1:發生自調用&#xff0c;類里面使用this調用本類的方法&#xff08;&#xff09;此時這個this對象不是代理類&#xff0c;而是UserService對象本身 2&#xff1a;方法不是public 3&#xff1a;數據庫不支持事務 4&#xff1a;沒有被spring管理 …

git標簽操作

一.標簽管理 1.理解標簽 標簽 tag &#xff0c;可以簡單的理解為是對某次 commit 的?個標識&#xff0c;相當于起了?個別名,當我們需要回退到某個重要版本時&#xff0c;直接使?標簽就能很快定位到 2.創建標簽 ?先&#xff0c;切換到需要打標簽的分?上,然后&#xf…

經典目標檢測網絡Yolo——原理部分

目標檢測問題 分為兩個子問題: 找到圖片中哪些位置、哪些區域含有目標對象識別這些區域中的目標對象是什么基于CNN的目標檢測算法能夠很好的解決第二個問題,在一張圖片僅含一個對象,且該對象占據了整張圖片絕大部分面積時,基于CNN的對象識別算法具有很高的準確率。 一種定…

操作系統(1)——學習導論(Ⅱ)

目錄 小程一言專欄鏈接: [link](http://t.csdnimg.cn/6grrU) 學習導論&#xff08;Ⅱ&#xff09;操作系統-賞前人佳作大型操作系統大型操作系統的一些特點和功能舉例 服務器操作系統服務器操作系統特點和功能舉例 多處理器操作系統舉例 個人計算機操作系統舉例 掌上計算機操作…

什么是ACID屬性。在MySQL中,如何使用事務?給出一個使用事務的示例,并解釋其工作原理。

解釋什么是ACID屬性 ACID是數據庫事務正確執行的四個基本要素的縮寫&#xff0c;包括原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔離性&#xff08;Isolation&#xff09;和持久性&#xff08;Durability&#xff09;。這四個屬性…

設計模式:什么是設計模式?①

一、什么是設計模式&#xff1f; 1. 是一類程序設計思想 2. 是在大量實踐過程中摸索總結出的標準經驗提煉 3. 具有多樣性和豐富性&#xff0c;不同情況應用的思想不同 二、設計模式的好處 1. 代碼生產力和效率的提升 2. 讓代碼表現更為規整&#xff0c;簡潔。閱讀維護管理的成本…

【競技寶】DOTA2-夢幻聯賽S22:AR命懸一線 XG確定晉級淘汰賽

北京時間2024年2月28日&#xff0c;DOTA2夢幻聯賽S22的比賽在昨日進入小組賽第三個比賽日&#xff0c;本次夢幻聯賽共有AR、XG、IG三支中國區的隊伍參賽&#xff0c;那么經過三日激烈的比賽之后&#xff0c;目前三支隊伍的積分情況以及晉級形勢如何呢&#xff1f; XG XG是小組…

貪心(基礎算法)--- 區間選點

905. 區間選點 思路 &#xff08;貪心&#xff09;O(nlogn) 根據右端點排序 將區間按右端點排序 遍歷區間&#xff0c;如果當前區間左端點不包含在前一個區間中&#xff0c;則選取新區間&#xff0c;所選點個數加1&#xff0c;更新當前區間右端點。如果包含&#xff0c;則跳…

常見的算法

查找算法 基本查找 package MyApi.search;public class a01BasicSearchdemo01 {public static void main(String[] args) { int[] arr{131,127,147,81,103,23,7,79}; int number82;System.out.println(BasicSearch(arr,number));}public static boolean BasicSearch(int[] ar…

Java二叉樹(1)

&#x1f435;本篇文章將對二叉樹的相關概念、性質和遍歷等知識進行講解 一、什么是樹 在講二叉樹之前&#xff0c;先了解一下什么是樹&#xff1a;樹是一種非線性結構&#xff0c;其由許多節點和子節點組成&#xff0c;整體形狀如一顆倒掛的樹&#xff0c;比如下圖&#xff1…

給nginx部署https及自簽名ssl證書

一、生成服務器root證書 openssl genrsa -out root.key 2048 openssl req -new -key root.key -out root.csr#Country Name (2 letter code) [XX]:---> CN#Country Name (2 letter code) [XX]:---> CN#State or Province Name (full name) []:---> Shanghai#Locality…

多層感知機 + 代碼實現 - 動手學深度學習v2 | 李沐動手學深度學習課程筆記

感知機 感知機≈二分類問題 感知機和其他問題的對比 訓練感知機 如果小于等于零&#xff0c;說明預測錯啦 &#xff0c;其實就是同號為正&#xff0c;異號為負 舉個分類的例子 增加樣本&#xff0c;改變分類線 繼續分類 感知機的收斂定理 XOR問題 XOR問題其實就是第1、3象限數…

【踩坑】一條指令解決torch_scatter等安裝報錯安裝不上問題

轉載請注明出處&#xff1a;小鋒學長生活大爆炸[xfxuezhang.cn] 目錄 背景說明 (推薦方法)解決方法一&#xff1a;使用conda安裝。 解決方法二&#xff1a;指定pip的網站。 解決方法三&#xff1a;直接去下載whl文件。 (終極方法)解決方法四&#xff1a;配置MSVC 特殊情況…

Linux系統運維腳本:掃描主機上多個端?狀態

目 錄 一、要求 二、解決方案 &#xff08;一&#xff09;解決思路 &#xff08;二&#xff09;方案 三、腳本程序實現 &#xff08;一&#xff09;腳本代碼和解釋 1、腳本代碼 2、代碼解釋 &#xff08;二&#xff09;腳本驗證 1、腳本編輯 2、給予執…