QsciScintilla下载地址
地址:https://riverbankcomputing.com/software/qscintilla/download
下载后打开里面的工程文件,然后分别在debug和release下运行生成相应的dll和lib
生成好后加入你的代码中
CONFIG(debug, debug|release){
LIBS += "$$PWD/Lib/64bit/qscintilla2_qt5d.lib"
} else {
LIBS += "$$PWD/Lib/64bit/qscintilla2_qt5.lib"
}
然后就是实现代码
class SysEditor : public QsciScintilla
{
Q_OBJECT
public:
SysEditor();
~SysEditor();
};
// SYSEDITOR_H
SysEditor::SysEditor()
{
//
QsciLexer *textLexer;
textLexer = new QsciLexerCPP;
textLexer->setColor(QColor("#008000"),QsciLexerCPP::Comment);
textLexer->setColor(QColor("#ff0000"),QsciLexerCPP::Number);
textLexer->setColor(QColor("#008000"),QsciLexerCPP::CommentLineDoc);
textLexer->setColor(QColor("#008000"),QsciLexerCPP::DoubleQuotedString);
textLexer->setColor(QColor("#ff00ff"),QsciLexerCPP::SingleQuotedString);
textLexer->setColor(QColor("#0055ff"),QsciLexerCPP::Keyword);
textLexer->setColor(QColor("#0055ff"),QsciLexerCPP::PreProcessor);
this->setLexer(textLexer);//给QsciScintilla设置词法分析器
//代码提示
QsciAPIs *apis = new QsciAPIs(textLexer);
apis->prepare();
QFont font1("Courier", 10, QFont::Normal);
// this->setFont(font1);
this->setAutoCompletionSource(QsciScintilla::AcsAll); //设置源,自动补全所有地方出现的
this->setAutoCompletionCaseSensitivity(true); //设置自动补全大小写敏感
this->setAutoCompletionThreshold(2); //设置每输入2个字符就会出现自动补全的提示
//设置自动缩进
this->setAutoIndent(true);
//Enables or disables, according to enable, this display of indentation guides.
this->setIndentationGuides(true);
//current line color
this->setCaretWidth(2);//光标宽度,0表示不显示光标
this->setCaretForegroundColor(QColor("darkCyan")); //光标颜色
this->setCaretLineVisible(true); //是否高亮显示光标所在行
this->setCaretLineBackgroundColor(Qt::lightGray);//光标所在行背景颜色
//selection color
this->setSelectionBackgroundColor(Qt::black);//选中文本背景色
this->setSelectionForegroundColor(Qt::white);//选中文本前景色
//It is ignored if an indicator is being used. The default is blue.
this->setUnmatchedBraceForegroundColor(Qt::blue);
this->setBraceMatching(QsciScintilla::SloppyBraceMatch);
//设置左侧行号栏宽度等
QFont font("Courier", 10, QFont::Normal);
QFontMetrics fontmetrics = QFontMetrics(font);
this->setMarginWidth(0, fontmetrics.width("000"));
this->setMarginLineNumbers(0, true);
this->setBraceMatching(QsciScintilla::SloppyBraceMatch);//括号匹配
this->setTabWidth(4);
QFont margin_font;
margin_font.setFamily("SimSun");
margin_font.setPointSize(11);//边栏字体设置px我这里显示不出行号,不知道是怎么回事
this->setMarginsFont(margin_font);//设置页边字体
this->setMarginType(0,QsciScintilla::NumberMargin);//设置标号为0的页边显示行号
//editor->setMarginMarkerMask(0,QsciScintilla::Background);//页边掩码
//editor->setMarginSensitivity(0,true);//设置是否可以显示断点,注册通知事件,当用户点击边栏时,scintilla会通知我们
//textEdit->setMarginsBackgroundColor(QColor("#bbfaae"));
// this->setMarginLineNumbers(0,true);//设置第0个边栏为行号边栏,True表示显示
// this->setMarginWidth(0,15);//设置0边栏宽度
this->setMarginsBackgroundColor(Qt::gray);//显示行号背景颜色
this->setMarginsForegroundColor(Qt::white);
this->setFolding(QsciScintilla::BoxedTreeFoldStyle);//折叠样式
this->setFoldMarginColors(Qt::gray,Qt::lightGray);//折叠栏颜色
//auto complete
//Acs[None|All|Document|APIs]
//禁用自动补全提示功能|所有可用的资源|当前文档中出现的名称都自动补全提示|使用QsciAPIs类加入的名称都自动补全提示
this->setAutoCompletionSource(QsciScintilla::AcsAll);//自动补全。对于所有Ascii字符
//editor->setAutoCompletionCaseSensitivity(false);//大小写敏感度,设置lexer可能会更改,不过貌似没啥效果
this->setAutoCompletionThreshold(3);//设置每输入一个字符就会出现自动补全的提示
//editor->setAutoCompletionReplaceWord(false);//是否用补全的字符串替代光标右边的字符串
}
SysEditor::~SysEditor()
{
}
最后效果