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