學習C++、QT---28(QT庫中使用QShortcut類對快捷鍵創建和使用的講解)

每日一言

????????所有的努力,都是為了讓未來的自己感謝現在的你。

QShortcut

我們的記事本肯定要有通過快捷鍵對字體的放大和縮小進行控制的功能啊,那么我們這邊就這個問題我們需要先學習一下QShortCut

我們這個類就是專門做快捷鍵的

老樣子我們剛開始學習這個類,可以直接通過案例Detailed Description進行查看

來獲得使用的靈感,

我們會發現這樣寫,那么我直接上代碼

那么我們會發現,這個快捷鍵的創建一般在構造函數函數里面實現,這個是為什么呢?

綜上所述,把快捷鍵相關代碼寫在構造函數里,是為了契合 Qt 中對象初始化流程、保證相關資源和環境就緒、讓初始化邏輯集中清晰,以及更好地關聯界面加載等,從而保障快捷鍵功能穩定、正常地工作 。當然,也不是絕對只能寫在構造函數,后續在合適的時機(比如界面完全加載后,通過其他觸發條件再動態設置快捷鍵 )也可以調整,但構造函數是最基礎、最常用的初始化位置。

好的我們先去實現一下快捷鍵對記事本的打開,還有我們記事本的保存功能

我這邊設置的是ctrl+0就是對文件的打開 ctrl+s就是對文件的保存

那我們會發現就這樣可以了嗎?實際上是沒有用的,因為還需要信號的綁定,那么就是信號與槽的操作

就是信號的問題,會發現文檔說,我們按下快捷鍵的時候會發信號,這個信號叫做activated

好的在這邊我們可以直接用lambda表達式來進行信號與槽的綁定

那么我們按下快捷鍵ctrl+o的時候那么這個就應該出現彈窗,也就是和我們打開文件的操作是一樣的,所以這邊我們直接使用open的這個函數就可以了,

那么我們按下快捷鍵ctrl+S的時候那么這個就應該出現彈窗,也就是和我們保存文件的操作是一樣的,所以這邊我們直接使用save的這個函數就可以了,

那么我們這樣就實現了我們想要的效果了

好的那么現在我們實現快捷鍵放大文字,和縮小文字也就很簡單了

那么我們要先處理怎么放大文字和縮小文字

首先我們在textEdit對文字的操作肯定是QTextEdit類里面尋找答案,因為TextEdit是QTExtEdit的對象,那么我們就去尋找

然后我們會發現沒有,或許我們會看到很多關于設置font的函數,但是有些是不一樣的效果的,所以我們需要自己積累起來,就比如我這邊的這個,專門是對于textEdit控件的字體放大,縮小的方法

我們發現這個QTextEdit里面沒有找到font()這個方法,我就直接說了我們需要找到這個font()方法,我們沒有在QTextEdit里面找到,那么我們就沿著繼承的一個一個類繼續找,最后在QWidget這個類里面找到了我們想要的方法

代碼展示

這個方法的話是返回一個QFont類型的已有字體對象的引用,不會創建新的對象,也就是所有的屬性,和方法都復制到我們新創建的QFont ?font對象進行接收

QFont?對象包含的遠不止字體大小,它是一個完整的字體描述對象,涵蓋了字體的所有屬性。

操作

語法

核心區別

你的代碼屬于

復制

QFont a = b;

創建新對象,屬性來自 b

?

賦值

a = b;(a 已存在)

修改 a 的屬性,覆蓋原有值

?

然后我們由于知道了QFont類里面有顯示字體大小的函數pointSize

返回值類型是int,所以我們用這個自定義的fontsize進行承接(返回是當前字體的大小),還有這個

if(font.pointSize()==-1)?return;這個完全是因為需要謹慎一點,畢竟人家說了返回-1的話就是返回錯誤(設置錯誤),所以我們需要進行判斷一下

,因為我們不是信號與槽嗎,所以我們是這樣設計的,我們設計的是用這個快捷鍵的時候字體就會比上次的字體更大1號,

所以,還是值得注意的是,這邊我們進行設置的時候是需要先font這個對象設置為新的字體大小后,還需要進行對textEdit的字體大小進行設置

為什么呢?可能很多人搞不懂,為什么很糊涂

因為我們的font是我們字體的所有數據,textEdit也有自己的對字體的控制的一套系統,所以我們還需要進行對textEdit的字體進行重新設置,并且也有對應的函數叫做setFont(font) ?這個就是將我們font這個對象的引用傳進去,

我們要知道一點,這個font是我們的字體對象,包括了字體的大小,格式、顏色等等各種屬性,所以我們這邊font.setPointSize這是在對我們的字體的大小做修改,所以最后setfont這個函數也是傳我們新創建的這個font對象的引用,也就是所有的屬性和方法,包括我們修改好的字體的大小以及等等,就等于是更換一遍屬性一樣,其實也是為了方便開發,因為以后會改字體的顏色、格式等等、所以直接傳對象引用會省去好多代碼,因為都改在對象里面了

Setfont(新數據) 等于刷新一下

我不懂你們看不看的懂,我是感覺很形象,很棒

所以啊,因此我們的對字體放大的方法就設置好了

縮小的代碼也是如此

接下來我們熟悉對信號與槽的綁定,還有對快捷鍵的創建

我們為了減少一點構造函數的代碼,我們對代碼片段進行了封裝也就是這個zoomIn和reduce(如下)

這樣就可以實現我們想要的效果了

總體邏輯是什么呢,就是我們要知道這個QShoutcut這個類是專門對我們這個鍵盤上的快捷鍵進行創建的、讓我們知道怎么創建,怎么使用都有講解,將怎么創建的案例和還有我們按下快捷鍵的時候,會發送actived這個信號,所以我們需要進行信號與槽的綁定,那么槽函數的話的話就主要是我們的字體的放大和縮小,我們想要的是我們通過ctrl+shift+加號按下的時候,發送actived信號給窗口進行捕獲,隨后調用槽函數,那么我們這邊要注意的一個點是ctrl+shift+加號 我們是想要寫成ctrl + shift + + 這樣寫的,但是我們不能這樣寫,必須要寫=號,和鍵盤的布局有關系

其實也是約定俗稱的寫法,真的不需要進行太多的了解,

簡單說:因為?+?是?Shift + =?的結果,沒有單獨的?+?按鍵,所以快捷鍵里用?=?來表示這個物理按鍵,寫成?Ctrl + Shift + =?更準確地反映了實際操作,這是行業通用的表示方法~

我們這個槽函數寫字體的放大和縮小操作,那么我們有一個函數叫做font(),那么

這個font的話就是可以返回字體的所有信息了。這個font位于QWidget類里面,返回的是對象的引用,那么我們創建一個對象進行承接,所有的數據(屬性和方法),隨后我們又通過這個font對象進行對字體的設置,設置邏輯為,每次觸發信號的時候,我就讓字體字號+1,怎么加1呢,我們對font這個對象設置完之后我們還是需要對textEdit的字體進行更新的,也就是重新setFont()傳的參數也是font的引用

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

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

相關文章

Web Worker:讓前端飛起來的隱形引擎

目錄 Web Worker:讓前端飛起來的隱形引擎 一、什么是 Web Worker? 1、為什么需要 web worker 2、什么是 web worker 二、基本使用方法 1、創建一個 Worker 文件(worker.js) 2、主線程引入并使用 三、實戰案例:…

關于在VScode中使用git的一些步驟常用命令及其常見問題:

輸入 gitee用戶 gitee綁定郵箱git config --global user.name "automated-piggy-senior" git config --global user.email "1323280131qq.com"克隆遠程庫到本地 git clone https://gitee.com/automated-piggy-senior/20250717-test.git常見問題1&#xff1…

LeafletJS 性能優化:處理大數據量地圖

引言 LeafletJS 作為一個輕量、靈活的 JavaScript 地圖庫,以其高效的渲染能力和模塊化設計深受開發者喜愛。然而,當處理大數據量(如數千個標記、復雜的 GeoJSON 數據或高分辨率瓦片)時,LeafletJS 的性能可能面臨挑戰&…

LLM(Large Language Model)大規模語言模型淺析

參考: https://zhuanlan.zhihu.com/p/7046080918 LLM(Large Language Model)大規模語言模型,是指具有大規模參數和復雜計算結構的機器學習模型。大模型里常說的多少B, B 是 Billion 的縮寫,表示 十億,如DeepSeek滿血版 671B(6710億參數); 大模型本質上是一個使用海量…

【后端】配置SqlSugar ORM框架并添加倉儲

目錄 1.添加包 2.配置連接字符串 3.配置SqlSugar 3.1.添加基礎類 3.2.添加方法 3.2.1.讀取配置方法 3.2.2.枚舉擴展方法 3.3.添加管理類(重要) 4.配置倉儲 4.1.倉儲接口添加 5.注冊 6.使用 該文檔是配置SqlSugar多租戶和加倉儲教程。使用 S…

全國高等院校計算機基礎教育研究會2025學術年會在西寧成功舉辦 ——高原論道啟新程,數智融合育英才

7 月16日至18日,全國高等院校計算機基礎教育研究會2025學術年會在青海西寧隆重召開。大會以“數智融合,創新計算機教育”為主題,匯聚人工智能領域頂尖專家學者、高校校長、產業翹楚及一線教師300 多人,共商人工智能時代計算機基礎…

AppTrace:重新定義免填邀請碼,解鎖用戶裂變新高度

??在移動互聯網時代,?用戶裂變是App增長的核心引擎,而邀請機制則是裂變的關鍵驅動力。然而,傳統的邀請碼機制——依賴用戶手動輸入、記憶復雜字符——已經成為用戶體驗的絆腳石,導致轉化率下降、運營成本上升。?AppTrace? 作…

神經網絡常見激活函數 13-Softplus函數

文章目錄Softplus函數導函數函數和導函數圖像優缺點PyTorch 中的 Softplus 函數TensorFlow 中的 Softplus 函數Softplus 函數導函數 Softplus函數 Softplus?(x)ln?(1ex)\begin{aligned} \operatorname{Softplus}(x) & \ln \bigl(1 e^{\,x}\bigr) \end{aligned} Softplu…

深度理解 KVM:Linux 內核系統學習的重要角度

📖 推薦閱讀:《Yocto項目實戰教程:高效定制嵌入式Linux系統》 🎥 更多學習視頻請關注 B 站:嵌入式Jerry 深度理解 KVM:Linux 內核系統學習的重要角度 作者:嵌入式 Jerry 一、為什么開發者需要學習 KVM&…

閉包的定義和應用場景

一、閉包是什么? 閉包是指函數可以“記住”并訪問它定義時的詞法作用域,即使這個函數在其作用域鏈之外執行。 簡單說:函數 A 在函數 B 中被定義,并在函數 B 外部被調用,它依然能訪問函數 B 中的變量,這就是…

北京-4年功能測試2年空窗-報培訓班學測開-第五十四天

今天交付的成果是,初版簡歷雖然只寫了項目部分,但用了一整天,期間聯系了前司組長,拿到了性能測試報告。然后再看壓測腳本,突然能看懂了,對服務端日志也能看懂些了,還找到了客戶端日志怎么說呢&a…

算法訓練營day24 回溯算法③ 93.復原IP地址 、78.子集、 90.子集II

今天繼續回溯算法的專題,第三篇博客! 93.復原IP地址 輸入:s "25525511135" 輸出:["255.255.11.135","255.255.111.35"] 切割字符串為4段,當進行到第四段的時候對第四段字符串進行判斷…

jeccg-boot框架實現xls模板導出功能

文章目錄一、后端部分二、前端部分三、模板制作一、后端部分 //1、在application-dev.yml文件增加模板路徑path :#模板路徑saxls: /data/opt/saxls/ //2、控制層寫法 public class sabassalController extends JeecgController<sabassalVo, IsabassalService> {Autowired…

LangChain4j入門:Java開發者的AI應用開發指南

&#x1f680; 在AI浪潮席卷全球的今天&#xff0c;Java開發者如何快速上手大語言模型應用開發&#xff1f;LangChain4j為我們提供了完美的解決方案&#xff01; 前言&#xff1a;為什么Java開發者需要LangChain4j&#xff1f; 想象一下&#xff0c;你正在開發一個企業級應用&…

相機光學(五十)——Depth AF

1.什么是Depth AFDepth AF&#xff08;景深自動對焦&#xff09;&#xff0c;也稱為 Depth-of-Field AF&#xff08;景深對焦&#xff09; 或 DEP AF&#xff0c;是一種基于景深范圍的自動對焦技術&#xff0c;核心目標是&#xff1a;確保從前景到背景的一整段距離都在清晰景深…

Unity 堆棧分析實戰指南 C#

Unity 堆棧分析實戰指南 提示&#xff1a;內容純個人編寫&#xff0c;歡迎評論點贊&#xff0c;來指正我。 文章目錄Unity 堆棧分析實戰指南1. 前言2. 什么是堆棧3. Unity 中的堆棧4. 堆棧分析工具5. 如何進行堆棧分析6. 實戰案例分析案例 1: 性能瓶頸分析案例 2: 內存泄漏檢測…

AE MDX L6 L12 L18 電源手側操作使用說明

AE MDX L6 L12 L18 電源手側操作使用說明

Gemini Function Calling 和 Qwen3 Embedding和ReRanker模型

Gemini API 的函數調用&#xff08;Function Calling&#xff09;功能。它解決了傳統大語言模型&#xff08;LLM&#xff09;的一個關鍵局限&#xff1a;LLM 本身是基于訓練數據的“知識庫”&#xff0c;擅長生成文本和回答問題&#xff0c;但無法直接執行代碼、訪問實時數據或…

??VMware Workstation Pro 17.5.0 安裝教程 - 詳細步驟圖解(附下載+激活)?

VMware Workstation Pro 17.5.0 是一款功能強大的虛擬機軟件&#xff0c;允許用戶在一臺計算機上同時運行多個操作系統&#xff08;如 Windows、Linux、macOS&#xff09;&#xff0c;適用于開發、測試、運維及學習環境搭建。本教程提供 ??詳細安裝步驟??&#xff0c;包括 …

端到端神經網絡視頻編解碼器介紹

一、技術演進&#xff1a;從模塊優化到全局智能的范式躍遷 傳統編解碼器的效率天花板&#xff08;1990-2017&#xff09; 架構局限&#xff1a;H.264/HEVC依賴手工設計的運動估計、DCT變換、熵編碼模塊&#xff0c;各模塊獨立優化導致全局效率損失。高分辨率瓶頸&#xff1a;4…