Scintilla是一个免费、跨平台、支持语法高亮的编辑控件。它完整支持源代码的编辑和调试,包括语法高亮、错误指示、自动补全(code completion)和函数提示(call tips)。能包含标记(marker)的页边(margin)可用于标记断点、折叠和高亮当前行。而QScintilla是Scintilla在QT上的移植。使用该库可以更为方便的开发Qt程序。
由于国内网站对于该库的说明文档比较缺少,所以本文主要参考自外网文档QScintilla。但是该网站使用的是Python语言,而本文使用的是C++语言,如果读者需要寻找Python语言的使用方法,可以去浏览该网站。除此之外,本文也参考了QScintilla库的相关开发文档。如有错误,还请指出。
官网下载地址:Riverbank Computing | Download
注意:有多个版本,而2.12及其以后的版本,不再支持Qt4和Qt5了,所以源码中没有QT4QT5这个目录了。这里我下载的是2.11.3这个版本。这里我使用的QT版本是 Qt 5.14.2。下载完成后解压,其目录结构如下:
| 目录名 | 用途 |
|---|---|
| Qt4Qt5 | 编译文件夹,生成对应的DLL文件 |
| designer-Qt4Qt5 | 相关的设计师插件的编译文件夹 |
| example-Qt4Qt5 | 简单的示例文件夹 |
| doc | 使用Doxygen生成的帮助文档 |
| lexers | 已实现的各语法分析器 |
| ... | ... |
对于相关的 Qt Designer 控件的编译,可以去浏览该网站:QScintilla的安装及简介。
打开Qt4Qt5文件夹,找到qscintilla.pro,双击打开,构建即可。这里我使用的是MinGW 32-bit及Debug方式进行构建。构建的目的就是生成我们需要的库文件。编译完成后,在Debug目录下,会生成我们需要的库文件,即qscintilla2_qt5d.dll。
为了后续章节的代码实现,这里则不使用库中所提供的example-Qt4Qt5/application.pro,该项目什么都没有实现。为此,这里我们新建一个项目。
项目建好之后,将之前编译的动态库文件qscintilla2_qt5d.dll以及Qt4Qt5目录下的Qsci文件夹拷贝到我们的工程目录下:

然后打开.pro文件,添加如下代码:
INCLUDEPATH += $$PWD/Qsci
LIBS += -L$$PWD -lqscintilla2_qt5d
最基本的类就是QSciScintillaBase,它是⽂本编辑器的基类,如下图所示,它继承于QAbstractScrollArea。
但是 QSciScintillBase 类不是直接使⽤的类,它很低级,因此很难使⽤。QScintilla 库提供了⼀个⾼级⼦类:QSciScintlla 。它就是⽂本编辑器类,其内有许多类似于 Qt 的 API 。 如果该类缺少所需的某些⾮常具体的功能,此时可以继承其⽗类 QSciScintillaBase。
向之前创建的项目中添加编辑器:
MainWindow.h 如下:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class QsciScintilla;
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
QsciScintilla* editor;
};
#endif // MAINWINDOW_H
MainWindow.cpp 如下:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <Qsci/qsciscintilla.h>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
editor = new QsciScintilla(this);
setCentralWidget(editor);
}
MainWindow::~MainWindow()
{
delete ui;
}
编译运行结果如下:
该编辑器本身就含有撤销、回撤、剪切、复制、粘贴、删除、全选操作。右键可以呼出编辑菜单。
按住 Ctrl 键,滚动鼠标滚轮,可以 放大/缩小 编辑器字体。
语法高亮显示的对象称之为词法分析器。创建并配置这样的词法分析器对象后,只需要将其应用到⽂本编辑器(QSciScintilla对象)中即可。关于词法分析器的实现,QScintilla 提供了QSciLexer类,该类是⼀个抽象类,因此在创建对象之前,需要对其进行子类化。
⼀个好的⽂本编辑器提供的不仅仅是需要语法的高亮显示,还需要有函数参数提示和自动补全等功能。这些功能都存在于QSciAPI类中。只需要从该类创建⼀个实例,并将其应用到 QSciLexer 对象中即可。而其父类是一个抽象类,类名为QSciAbstractAPIs。
QsciPrinter:继承自QPrinter,能够打印 Scintilla 文档文本的类。QsciCommand:内部编辑器命令,其中可能绑定了一个或两个键。QsciCommandSet:可能绑定了键的所有内部编辑器命令的集合。QsciDocument:要编辑的文档。QsciStyle:封装样式的所有属性。QsciStyledText:一段文本的容器和用于显示文本的样式。除此之外,还有大量的继承自QsciLexer类的特定语言类,目前支持的语言有:AVS、Bash、批处理、CMake、CoffeeScript、C++、C#、IDL、Java、JavaScript、CSS、D、Diff、Fortran77、Fortran、HTML、XML、JSON、Lua、Makefile、Markdown、Matlab、Octave、Pascal、Perl、PO、PostScript、POV、Properties、Python、Ruby、Spice、SQL、TCL、TeX、Verilog、VHDL、YAML、Macro。
其余该系列文章如下:
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现
遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
Rails相对较新。我正在尝试调用一个API,它应该向我返回一个唯一的URL。我的应用程序中捆绑了HTTParty。我已经创建了一个UniqueNumberController,并且我已经阅读了几个HTTParty指南,直到我想要什么,但也许我只是有点迷路,真的不知道该怎么做。基本上,我需要做的就是调用API,获取它返回的URL,然后将该URL插入到用户的数据库中。谁能给我指出正确的方向或与我分享一些代码? 最佳答案 假设API为JSON格式并返回如下数据:{"url":"http://example.com/unique-url"
我正在尝试复制此GETcurl请求:curl-D--XGET-H"Authorization:BasicdGVzdEB0YXByZXNlYXJjaC5jb206NGMzMTg2Mjg4YWUyM2ZkOTY2MWNiNWRmY2NlMTkzMGU="-H"Content-Type:application/json"http://staging.example.com/api/v1/campaigns在Ruby中,通过电子邮件+apikey生成身份验证:auth="Basic"+Base64::encode64("test@example.com:4c3186288ae23fd9661c
我安装了ruby、yeoman,当我运行我的项目时,出现了这个错误:Warning:Running"compass:dist"(compass)taskWarning:YouneedtohaveRubyandCompassinstalledthistasktowork.Moreinfo:https://github.com/gruUse--forcetocontinue.Use--forcetocontinue.我有进入可变session目标的路径,但它不起作用。谁能帮帮我? 最佳答案 我必须运行这个:geminstallcom
文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定