需求:
利用QScintilla 编辑lua 脚本
步骤:
1,下载 QScintilla Riverbank Computing | Download
2, 打开 src/qscintilla.pro 文件 编译出 dll库
3,工程中引入这个库
注意debug 模式 必须加载debug 版本编译的库,不然回提示 ”QWidget: Must construct a QApplication before a QWidget“
4,使用
#include <QApplication>
#include <QMainWindow>
#include <QVBoxLayout>
#include <qsciscintilla.h>
#include <qscilexerlua.h>
#include <qsciapis.h>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 创建窗口和布局
QMainWindow window;
// 创建编辑器控件
QsciScintilla editor(&window);
window.setCentralWidget(&editor);
editor.setMarginWidth(0, 40);
editor.setIndentationGuides(true);
editor.setTabWidth(4);
editor.setUtf8(true);
QsciLexerLua *textLexer = new QsciLexerLua;
editor.setLexer(textLexer);
//设置编码为UTF-8
QsciAPIs apis(textLexer);
apis.add(QString("and"));
apis.add(QString("break"));
apis.add(QString("do"));
apis.add(QString("else"));
apis.add(QString("elseif"));
apis.add(QString("end"));
apis.add(QString("false"));
apis.add(QString("for"));
apis.add(QString("function"));
apis.add(QString("if"));
apis.add(QString("in"));
apis.add(QString("local"));
apis.add(QString("nil"));
apis.add(QString("not"));
apis.add(QString("or"));
apis.add(QString("repeat"));
apis.add(QString("return"));
apis.add(QString("then"));
apis.add(QString("true"));
apis.add(QString("until"));
apis.add(QString("while"));
apis.prepare();
editor.setAutoCompletionSource(QsciScintilla::AcsAll);
editor.setAutoCompletionCaseSensitivity(true);
editor.setAutoCompletionThreshold(1);
editor.SendScintilla(QsciScintilla::SCI_SETCODEPAGE,QsciScintilla::SC_CP_UTF8);
editor.setCaretLineVisible(true);
editor.setFolding(QsciScintilla::BoxedFoldStyle);
// 显示窗口
window.show();
return app.exec();
}
5,效果