每日一言
????????所有的努力,都是為了讓未來的自己感謝現在的你。
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的引用