Qt實(shí)現(xiàn)文本編輯器(一)
在Qt中QMainWindow是一個(gè)為用戶提供主窗口程序的類,包含了:菜單欄、工具欄、錨接部件、狀態(tài)欄以及一個(gè)中部件。今天我就來通過實(shí)現(xiàn)一個(gè)簡單的文本編輯器講解下對(duì)QMainWindow的各種功能講解。
想要完整的實(shí)現(xiàn)一個(gè)編輯器,所需要的功能還是比較全面的。今天主要來講解如何構(gòu)建文本編輯器,包括了:菜單欄、工具欄以及文本編輯區(qū)域。
功能實(shí)現(xiàn)
在QMainWindow中,菜單與工具欄都與QAction類有密切的關(guān)系,實(shí)現(xiàn)菜單和工具欄主要是對(duì)動(dòng)作的實(shí)現(xiàn)。
QAction類為用戶提供了一個(gè)統(tǒng)一的命令接口,無論是從菜單觸發(fā)還是從工具欄觸發(fā),甚至是通過快捷鍵觸發(fā)都調(diào)用同樣的操作接口,達(dá)到同樣的目的。
動(dòng)作(QAction)實(shí)現(xiàn)
設(shè)計(jì)到的動(dòng)畫包括了以下幾個(gè)功能:
打開、新建、退出、復(fù)制、剪切、粘貼
對(duì)應(yīng)的動(dòng)作類,如下面表格中介紹,后續(xù)都是用類指針的方式說明:
動(dòng)作 | 類名 | 功能 | 組合鍵 |
---|---|---|---|
打開 | m_pActionOpenFile | 打開一個(gè)指定的文件,從本地程序中打開 | Ctrl+O |
新建 | m_pActionNewFile | 彈出新的文件編輯窗口 | Ctrl+N |
退出 | m_pActionExit | 退出 | Ctrl+Q |
復(fù)制 | m_pActionCopy | 復(fù)制 | Ctrl+C |
剪切 | m_pActionCut | 剪切 | Ctrl+X |
粘貼 | m_pActionPaste | 粘貼 | Ctrl+V |
在文本編輯器中一般會(huì)用到這幾項(xiàng)功能,我們可以對(duì)每個(gè)動(dòng)作功能進(jìn)行快捷鍵綁定,接下來就以“打開文件動(dòng)作”做詳細(xì)說明吧~
"打開"動(dòng)作
創(chuàng)建一個(gè)打開動(dòng)作
m_pActionOpenFile = new QAction(QIcon(":/QtTextEditor/image/open.jpg"), QStringLiteral("打開"), this);
在創(chuàng)建“打開”動(dòng)作的同時(shí)也指定了當(dāng)前動(dòng)作使用的圖標(biāo)、名稱以及父窗口
設(shè)置快捷鍵
m_pActionOpenFile->setShortcut(tr("Ctrl+O"));
當(dāng)前“打開”動(dòng)作的組合鍵是Ctrl+O
設(shè)置提示信息
m_pActionOpenFile->setStatusTip(QStringLiteral("打開一個(gè)文件"));
類似于控件的setToolTips功能。
當(dāng)鼠標(biāo)光標(biāo)移動(dòng)到此動(dòng)作對(duì)應(yīng)的菜單條目或工具欄按鈕上時(shí),在狀態(tài)欄上會(huì)顯示“打開一個(gè)文件”的提示。
有的人會(huì)問道:在創(chuàng)建打開動(dòng)作實(shí)例的時(shí)候,不傳入圖片可以嗎?
當(dāng)然沒問題啦,在創(chuàng)建動(dòng)作時(shí),不傳入圖標(biāo)時(shí),這類動(dòng)作通常只在菜單中出現(xiàn),而不在工具欄上面使用。這是唯一的區(qū)別
剩下的其他動(dòng)作我們可以也按照同樣的方式進(jìn)行設(shè)置,具體的組合鍵可以參照我的,也可以隨意發(fā)揮。
菜單(Menus)實(shí)現(xiàn)
在實(shí)現(xiàn)了各個(gè)動(dòng)作之后,直接展示能被我們看到嗎?
如果不清楚的可以運(yùn)行下,結(jié)果發(fā)現(xiàn)是不可以被看到的。是需要將它們通過菜單、工具欄或者快捷鍵的方式體現(xiàn)出來。
什么是菜單呢?
就拿Notepad++文本編輯器來說明下
紅色框標(biāo)注的區(qū)域是菜單欄,藍(lán)色框標(biāo)注的區(qū)域是工具欄
接下來,我們就來實(shí)現(xiàn)菜單欄上的功能,這里只是簡單的列舉了幾項(xiàng),包括:文件、縮放、旋轉(zhuǎn)、鏡像
功能對(duì)應(yīng)表如下:
名稱 | 類名 | 功能 |
---|---|---|
文件 | m_pMenuFile | 打開一個(gè)新文件;創(chuàng)建一個(gè)新文件;退出 |
縮放 | m_pMenuZoom | 復(fù)制文件;剪切文件;粘貼文件;放大;縮小 |
旋轉(zhuǎn) | m_pMenuRotate | 90°旋轉(zhuǎn);180°旋轉(zhuǎn);270°旋轉(zhuǎn) |
鏡像 | m_pMenuMirror | 垂直鏡像;水平鏡像 |
菜單創(chuàng)建
m_pMenuFile = menuBar()->addMenu(QStringLiteral("文件")); m_pMenuFile->addAction(m_pActionOpenFile); m_pMenuFile->addAction(m_pActionNewFile); m_pMenuFile->addSeparator();
就以文件菜單為例,不采用new的方式,直接調(diào)用QMainWindow的menuBar()函數(shù)就可以得到主窗口的菜單欄指針,然后,再調(diào)用QMenuBar::addMenu()函數(shù),就可以在菜單欄中插入一個(gè)新菜單fileMenu。
其中,fileMenu就是一個(gè)QMenu類對(duì)象。
addAction:可以在菜單條目中添加“打開”、“新建”的動(dòng)作,如下圖所示:
像:縮放菜單、旋轉(zhuǎn)菜單、鏡像菜單實(shí)現(xiàn)方法類似,這里就不一一說明了。
工具欄(ToolBars)實(shí)現(xiàn)
在主窗口的工具欄上可以存在多個(gè)工具條,一般情況下一個(gè)菜單對(duì)應(yīng)一個(gè)工具條,在實(shí)際應(yīng)用中也可以根據(jù)項(xiàng)目需求進(jìn)行分配。
在這里我為了簡單起見,按照菜單的數(shù)量劃分了工具條:文件工具條、編輯工具條、旋轉(zhuǎn)工具條、鏡像工具條
紅色框區(qū)域就是創(chuàng)建的四個(gè)工具條,其中還標(biāo)注了兩個(gè)藍(lán)色框,這兩個(gè)藍(lán)色框中的內(nèi)容就是在設(shè)置動(dòng)作時(shí),寫入的提示信息。
就拿文件工具條來舉例吧
m_pToolFile = addToolBar("File"); m_pToolFile->addAction(m_pActionOpenFile); m_pToolFile->addAction(m_pActionNewFile);
在默認(rèn)的創(chuàng)建工具條的屬性中,是可以隨意拖動(dòng)工具條的,想要禁止拖動(dòng)可以如下設(shè)置:
m_pToolFile->setMovable(false);
創(chuàng)建好了菜單以及工具欄之后,中間剩下的區(qū)域就是我們文本編輯以及展示的區(qū)域了。
展示區(qū)域
展示區(qū)域主要是進(jìn)行編寫工作,在這里我們可以采用QTextEdit編輯控件來處理。
那么,如何確定該編輯框的展示區(qū)域呢?
在QMainWindow主窗口中有一個(gè)叫做中心窗口部件:Central Widget,創(chuàng)建了QTextEdit控件后,將該控件指針賦值到中心窗口部件就可以實(shí)現(xiàn)編輯區(qū)域在中間展示的效果了
實(shí)際的展示效果:
實(shí)際的代碼操作:
m_editContent = new QTextEdit(this); setCentralWidget(m_editContent);
小結(jié)(一)
看到這里,就可以構(gòu)建出整體的編輯頁面了,包括了三個(gè)部分:菜單欄區(qū)域、工具欄區(qū)域、編輯區(qū)域
那么,下一章節(jié)我們繼續(xù)介紹文本編輯器功能
到此這篇關(guān)于Qt實(shí)現(xiàn)文本編輯器(一)的文章就介紹到這了,更多相關(guān)Qt文本編輯器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++類與對(duì)象的重點(diǎn)知識(shí)點(diǎn)詳細(xì)分析
類和對(duì)象是兩種以計(jì)算機(jī)為載體的計(jì)算機(jī)語言的合稱。對(duì)象是對(duì)客觀事物的抽象,類是對(duì)對(duì)象的抽象。類是一種抽象的數(shù)據(jù)類型;變量就是可以變化的量,存儲(chǔ)在內(nèi)存中—個(gè)可以擁有在某個(gè)范圍內(nèi)的可變存儲(chǔ)區(qū)域2023-02-02C++實(shí)現(xiàn)簡單信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡單信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03FFmpeg實(shí)戰(zhàn)之利用ffplay實(shí)現(xiàn)自定義輸入流播放
ffplay是FFmpeg提供的一個(gè)極為簡單的音視頻媒體播放器,可以用于音視頻播放、可視化分析。本文將利用ffplay實(shí)現(xiàn)自定義輸入流播放,需要的可以參考一下2022-12-12