用Qt的Qsciscintilla控件实现一个简单IDE
参考文档
scintilla官方文档 https://www.scintilla.org/ScintillaDoc.html
https://blog.csdn.net/weixin_38326893/article/details/80001548?utm_source=blogxgwz2
https://blog.csdn.net/e_one/article/details/71037103?locationNum=2&fps=1
https://qscintilla.com/
https://blog.csdn.net/flyear_cn/article/details/22588841
开发环境
windows10
Qt 5.11.2 (MSVC 2017, 64 bit)
准备工作
Qscitinlla下载地址
https://riverbankcomputing.com/software/qscintilla/download
编译Qscitinlla
进入文件夹QScintilla_gpl-2.10.8\Qt4Qt5\
用QtCreator打开qscintilla.pro
右下角编译环境改成Release
启动构建,构建产生的文件之后会用到
新建项目
笔者这里选择了和Qscitinlla编译时一样的Kits,没试过其他的,不知道其他的行不行
基类选择QWidget
添加Qscitinlla静态库
右键项目文件夹,选择添加库
选择外部库
库文件选择到刚刚编译Qscitinlla时产生的构建文件夹,你会知道选择哪一个的(就一个能选的),这里笔者选择的是qscintilla2_qt5.lib
选择静态库
Qt会自动在.pro文件中添加引用
添加include目录
打开项目的.pro文件
添加该行
INCLUDEPATH += D:\System\Desk\123\QScintilla_gpl-2.10.8\Qt4Qt5\
以上目录为笔者自己电脑上的目录,请自行填写下载解压的Qscitinlla文件夹中的Qt4Qt5文件夹路径
检查一下
项目头文件中添加
#include <Qsci/qsciscintilla.h>
public中添加
QsciScintilla *editor=new QsciScintilla(this);
左下角编译环境选择Release
启动构建
若不报错,恭喜你,完成了准备工作
笔者这里有个问题,不管怎样都没办法在Debug环境下运行成功…但是Debug构建没问题
简单功能实现
以下代码块中的editor均为QsciScintilla对象指针
头文件
//QsciScintilla本体
#include<Qsci/qsciscintilla.h>
//Lua语言的词法分析器
#include <Qsci/qscilexerlua.h>
//自动补全的apis
#include <Qsci/qsciapis.h>
行号提示
editor->setMarginType(0,QsciScintilla::NumberMargin);//设置编号为0的页边显示行号
editor->setMarginLineNumbers(0,true);//对该页边启用行号
editor->setMarginWidth(0,35);//设置页边宽度
设置UTF-8编码
editor->SendScintilla(QsciScintilla::SCI_SETCODEPAGE,QsciScintilla::SC_CP_UTF8);
设置词法分析器
QsciLexer *textLexer;
textLexer = new QsciLexerLua;
editor->setLexer(textLexer);
设置自动完成
QsciAPIs *apis = new QsciAPIs(textLexer);
//在这里可以添加自定义的自动完成函数
//apis->add(QString("func_name(arg_1,arg_2) function info"));
apis->prepare();
//设置自动完成所有项
editor->setAutoCompletionSource(QsciScintilla::AcsAll);
//设置大小写敏感
editor->setAutoCompletionCaseSensitivity(true);
//每输入1个字符就出现自动完成的提示
editor->setAutoCompletionThreshold(1);
其他设置
//开启自动缩进
editor->setAutoIndent(true);
//设置缩进的显示方式
editor->setIndentationGuides(QsciScintilla::SC_IV_LOOKBOTH);
//显示选中的行号
editor->setCaretLineVisible(true);
//显示选中行号的背景色
editor->setCaretLineBackgroundColor(Qt::lightGray);
//左侧行号显示的背景色
editor->setMarginsBackgroundColor(Qt::gray);
//设置括号匹配
editor->setBraceMatching(QsciScintilla::SloppyBraceMatch);