惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
博客园 - 三生石上(FineUI控件)
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
Y
Y Combinator Blog
博客园 - 聂微东
Google DeepMind News
Google DeepMind News
D
Docker
罗磊的独立博客
Microsoft Security Blog
Microsoft Security Blog
D
DataBreaches.Net
B
Blog
Vercel News
Vercel News
Recent Announcements
Recent Announcements
GbyAI
GbyAI
阮一峰的网络日志
阮一峰的网络日志
T
The Blog of Author Tim Ferriss
H
Hackread – Cybersecurity News, Data Breaches, AI and More
P
Proofpoint News Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Azure Blog
Microsoft Azure Blog
宝玉的分享
宝玉的分享

博客园 - 卡卡西村长

QT使用linuxdeployqt打包 统计vertica表的行数 Vertica中的group_concat函数 查看mysql当前事务锁并kill vscode中文乱码问题及几种常见的解决方案 改善[Vertica] current ResultSet because its buffer(8192) is full的错误 通过 phantomjs抓取仁医在线的练习题 notepad++ 配置fasm汇编环境 springboot动态启用RabbitMQ消费Listener mysql日期字段分区索引 排查tomcat服务器CPU占用率过高的问题 FFMPEG把图片序列合成为视频 统计nginx日志中的ipv4和ipv6占比 vertica性能优化汇总 oracle unwrap解密工具 windows10上安装OpenSSL_1.1.1d_x64 centos7上安装phantomjs并对页面截屏 如何用Java Socket实现一个简单的Redis客户端 cenos上通过yum安装mariadb
基于QScintilla项目实现SQL编辑器
卡卡西村长 · 2024-01-31 · via 博客园 - 卡卡西村长

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程序,运行效果如下: