基于QScintilla项目实现SQL编辑器
1、下载QScintilla:
https://www.riverbankcomputing.com/static/Downloads/QScintilla/2.14.1/QScintilla_src-2.14.1.zip
2、解压缩,目录结构如下:
QScintilla_src-2.14.1 - src 组件源代码 - qsci 组件头文件 - scintilla 内置的各种语言的词法扫描源代码 - example 范例(用不到) - doc 文档(用不到) - Python 为Python提供的封装(用不到) - designer 为QT设计器注册QScintilla控件(用不到)
编译QScintilla只会用到前三个目录(src、qsci、scintilla)。
3、用QT(5.14.2)打开QScintilla工程。
工程文件:QScintilla_src-2.14.1/src/qscintilla.pro
4、构建QScintilla工程,分别用debug和release两种模式构建。
build-qscintilla-Desktop_Qt_5_14_2_MinGW_64_bit-Debug
----debug/libqscintilla2_qt5d.a
----debug/qscintilla2_qt5d.dll
build-qscintilla-Desktop_Qt_5_14_2_MinGW_64_bit-Release
----release/libqscintilla2_qt5.a
----release/qscintilla2_qt5.dll
5、创建一个Demo工程,比如:QScintillaDemo
在QScintillaDemo目录下创建一个lib目录,把第4步生成的库文件拷贝过去,目录结构如下:
QScintillaDemo/lib/QScintilla
----/debug/qscintilla2_qt5d.a
----/debug/qscintilla2_qt5d.dll
----/release/qscintilla2_qt5.a
----/release/qscintilla2_qt5.dll
----/include/Qsci/*.h
6、在工程文件QScintillaDemo.pro中添加如下配置:
# QScintilla INCLUDEPATH += $$PWD/lib/QScintilla/include DEPENDPATH += $$PWD/lib/QScintilla/include debug { LIBS += -L$$PWD/lib/QScintilla/debug -lqscintilla2_qt5d } release { LIBS += -L$$PWD/lib/QScintilla/release -lqscintilla2_qt5 }
7、修改主窗口类MainWindow的源代码,使用QScintilla编辑器。
MainWindow窗口类的头文件:
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> class QsciScintilla; class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); private: QsciScintilla *textEdit; }; #endif // MAINWINDOW_H
MainWindow窗口类的源代码文件:
#include "mainwindow.h" #include "Qsci/qsciscintilla.h" #include "Qsci/qscilexersql.h" #include "Qsci/qsciapis.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow{parent} { resize(800, 480); textEdit = new QsciScintilla; setCentralWidget(textEdit); //语法高亮 QsciLexerSQL* textLexer = new QsciLexerSQL(this); textEdit->setLexer(textLexer); //文档中出现的单词支持自动补全 textEdit->setAutoCompletionSource(QsciScintilla::AcsAll); textEdit->setAutoCompletionCaseSensitivity(false); textEdit->setAutoCompletionThreshold(1); //常用关键字支持自动补全 QsciAPIs *apis = new QsciAPIs(textLexer); apis->add(QString("select")); apis->add(QString("from")); apis->add(QString("left")); apis->add(QString("right")); apis->add(QString("full")); apis->add(QString("join")); apis->add(QString("on")); apis->add(QString("where")); apis->add(QString("and")); apis->add(QString("or")); apis->add(QString("not")); apis->add(QString("between")); apis->add(QString("exists")); apis->add(QString("group")); apis->add(QString("by")); apis->add(QString("order")); apis->add(QString("limit")); apis->add(QString("offset")); apis->prepare(); //设置编码为UTF-8 textEdit->SendScintilla(QsciScintilla::SCI_SETCODEPAGE, QsciScintilla::SC_CP_UTF8); //左侧显示行号 textEdit->setMarginLineNumbers(0, true); textEdit->setMarginWidth(0, 20); //TAB缩进4个字符 textEdit->setTabWidth(4); //当前行高亮 textEdit->setCaretLineVisible(true); textEdit->setCaretLineBackgroundColor(QColor("#E8E8FF")); //折叠样式 textEdit->setFolding(QsciScintilla::BoxedTreeFoldStyle); }
最后,构建Demo程序,运行效果如下:
作者:Lave Zhang
出处:http://www.cnblogs.com/lavezhang/
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。