源代碼已上傳,有需要可以下載:
源代碼
0.開發(fā)環(huán)境
看了那么多博客,沒幾個說明自己的開發(fā)環(huán)境的,所以開頭先說明一下這個代碼編輯器的開發(fā)環(huán)境
系統(tǒng) .5
內(nèi)核
Qt版本 5.8.0
1.編輯器預(yù)覽
下面進入正文,先來看一下這個編輯器的基本情況
有基本的語法高亮\自動補全\換行縮進\括號匹配.
菜單欄有基本功能的實現(xiàn),能選擇不同的語言來進行語法高亮.
基本上實現(xiàn)了一個代碼編輯器的基本功能.
接下來將從代碼編輯器主體的實現(xiàn)和菜單欄的實現(xiàn)開始說.
2.項目的創(chuàng)建
建立一個Qt .
設(shè)置默認.
3.庫介紹
語法高亮\自動補全\換行縮進\括號匹配\行號顯示的功能主要由一個重要的外部庫實現(xiàn)--
官網(wǎng):
Qt下這個庫叫
下載:
說明文檔:
功能的實現(xiàn)主要參照了兩人的博客,在此非常感謝(ps:兩人的都打錯了)
Qt文本高亮控件的用法
Qt中文本編輯器實現(xiàn)語法高亮功能()
在此要修正一下兩個博客說到的的配置問題
在.pro文件添加頭文件以及動態(tài)鏈接庫的引用:
+= 文件夾的地址
然后Qt中右鍵工程選擇添加外部庫
選擇編譯生成的.a文件.
這樣pro文件就添加了外部庫的內(nèi)容.
4.實現(xiàn) 語法高亮\自動補全\換行縮進\括號匹配\行號顯示
代碼實現(xiàn)編輯器主體的界面
//.h
class :
{
:
( * = 0);
//~();
*(){ //返回的對象指針
;
}
void (const &);//設(shè)置不同語言的詞法分析器
:
*=new (this);
};
#endif //
源文件實現(xiàn)類的構(gòu)造函數(shù)和設(shè)置詞法分析器函數(shù)
構(gòu)造函數(shù)先實現(xiàn)行號提示\界面顯示\字體和編碼方式編碼方式設(shè)置為UTF-8,不然中文會亂碼設(shè)置編碼格式還有其他更簡短的函數(shù)實現(xiàn),具體查看庫的說明文件.
//行號提示
->(0,::);//設(shè)置編號為0的頁邊顯示行號。
->(0,true);//對該頁邊啟用行號
->(0,15);//設(shè)置頁邊寬度
//界面
* = new (this);
->();
->(0,0,0,0);
//設(shè)置顯示字體
->(QFont(" 10 Pitch"));
//設(shè)置編碼方式
->(::,::);//設(shè)置編碼為UTF-8
下面是函數(shù)內(nèi)的函數(shù)的實現(xiàn)
設(shè)置詞法分析器函數(shù)
*;
= new ;
->();//給設(shè)置詞法分析器
先設(shè)置好詞法分析器再設(shè)置代碼提示等功能
//代碼提示
*apis = new ();
apis->();
->rce(::); //設(shè)置源c語言實現(xiàn)文本編輯器c語言實現(xiàn)文本編輯器,自動補全所有地方出現(xiàn)的
->(true); //設(shè)置自動補全大小寫敏感
->(2); //設(shè)置每輸入2個字符就會出現(xiàn)自動補全的提示
//設(shè)置自動縮進
->(true);
//顯示選中行號
->(true);
->(Qt::);
// or , to , this of .
->(true);
//顯示行號背景顏色
//->Color(Qt::gray);
//It is if an is being used. The is blue.
->(Qt::blue);
//括號匹配
->(::);
至此代碼編輯器的功能基本實現(xiàn)
5.的基本設(shè)置
構(gòu)造函數(shù)要加上對象和當前文本的文件名
:
*=new (this);
;//當前文本的文件名
對應(yīng)的構(gòu)造函數(shù)實現(xiàn)要加上
(tr("Qt代碼編輯器"));
this->(QSize(600,500)); //設(shè)置初始窗口大小
(); //設(shè)主體為代碼編輯器
其他基本為槽函數(shù),下面會講到
6.文件功能的實現(xiàn) 新建\打開\保存\另存為\關(guān)閉
這里就用到了的功能函數(shù).
具體功能的實現(xiàn)參照了下面的博客
[轉(zhuǎn)載]Qt -- 實現(xiàn)文本新建/打開/保存/另存
沒改動的地方就不貼出來了
#1 基本上.()對象改為
->()
#2 打開函數(shù)(非槽函數(shù))實現(xiàn)
void ::(const &)
{
QFile file();
->();
if(!file.open(QFile::|QFile::Text))
{
::(this,
"",
" read file"
);
;
}
else
{
in(&file);
->()->(in.());
();
}
}
增加了根據(jù)文件名設(shè)置語法分析器
->();
*注意 這是類中的函數(shù),修改上面類中的函數(shù)實現(xiàn)根據(jù)不同文件名的后綴來實現(xiàn)不同語言的詞法分析器.
修改.(in.())為
->()->(in.());
#3 另存為函數(shù)
bool ::()
{
;
=::(this,
::("文件另存為"),
"",
tr(" Files(*);;text(*.txt);;C(*.cpp);;(*.py);;Java(*.java);;HTML(*html)"),
&
);
if(.("text")&&!.(".txt")){
+=".txt";
}
if(.("C")&&!.(".cpp")){
+=".cpp";
}
if(.("")&&!.(".py")){
+=".py";
}
if(.("Java")&&!.(".java")){
+=".py";
}
if(.("HTML")&&!.(".html")){
+=".py";
}
if(.())
false;
else if(())
();
else false;
}
第七行函數(shù)可以實現(xiàn)在保存的時候選擇不同的文件類型
選擇的類型字符串保存在第八行的中對
之后的代碼根據(jù)而在保存的文件中添加后綴來更改文件類型
7.菜單欄增加對不同語言的選擇以實現(xiàn)對不同語言的語法高亮
做法和在菜單欄增添打開\保存等功能的做法大同小異
語言選擇的槽函數(shù)(以c為例)
void (){
->(".cpp");
}
這樣就可以實現(xiàn)語言的選擇
8.總結(jié)
主要需要熟悉庫的使用
難度不大但不能只依賴庫函數(shù)
要結(jié)合自己本身c語言的知識