本文参照
Qsciscintilla的下载和安装:https://www.2cto.com/kf/201808/775066.html
创建QWidget工程:https://www.cnblogs.com/pinking/p/7788447.html
QT配置Qscitinlla: https://blog.csdn.net/qq_36689119/article/details/94716890
Qt动态库的链接问题:https://blog.csdn.net/luoyayun361/article/details/79435364
Qscitinlla的介绍
Scintilla是一个免费、跨平台、支持语法高亮的编辑控件。它完整支持源代码的编辑和调试,包括语法高亮、错误指示、代码完成(code completion)和调用提示(call tips)。能包含标记(marker)的页边(margin)可用于标记断点、折叠和高亮当前行,我们常用的Notepad++就是基于这个库开发的。http://www.scintilla.org。而QScintilla是Scintilla在QT上的移植。下面以windows开发为例:
Qscitinlla下载地址: https://riverbankcomputing.com/software/qscintilla/download
Qscitinlla的安装及其编译
1.目录结构
Qt4Qt5 | 编译文件夹, 生成对应的DLL文件 |
designer-Qt4Qt5 | 相关的设计师插件的编译文件夹 |
example-Qt4Qt5 | 简单的示例文件夹 |
doc | 使用Doxygen生成的帮助文档 |
lexers | 已实现的各语法分析器 |
… | … |
2.安装过程
2.1 本地环境
Qscitinlla的版本为:2.11.2
构建套件:Desktop Qt 5.13.0 MinGW 64-bit
部署:Deploy Configuration
2.2安装Qscitinlla
在这之前将你的qmake和mingw32-make路径添加进你的系统变量环境中,比如我的电脑上添加的路径为:
E:\Qt\Qt5.13.0\5.13.0\mingw73_64\bin
E:\Qt\Qt5.13.0\Tools\mingw730_64\bin
使用win+r 使用cmd进入命令窗口
cd 进入 ..\QScintilla_gpl-2.11.2\Qt4Qt5下
qmake qscintilla.pro #使用qmake工具生成makefile文件
mingw32-make #使用Qt MinGW版本自带的make工具按照makefile里面的定义的方式编译qscintilla的源文件
mingw32-make install #将编译生成的库整合到自己的Qt源文件中
然后我发现使用QtCreator打开qscintilla.pro,构建项目,编译后无法生成qscintilla2.lib或者qscintilla2.a文件,只生成了生成qscintilla2_qt5.lib或.a文件文件。(有大神可以帮我解惑一下么)。
然后我发现了这套语句需要放在项目文件.pro:
INCLUDEPATH += $$PWD/Qsci
LIBS += -L$$PWD -lqscintilla2_qt5
LIBS += -L$$PWD -lqscintilla2_qt5 这句话是找到目标动态库。
先将解压目录下的Qt4Qt5中的Qsci目录拷贝到新创建的工程目录下。将qscintilla2.lib也放到项目文件下。
3.创建工程
3.1添加头文件
在头文件中间添加下面内容。
//QsciScintilla作为QWidget的控件,需要添加该控件的头文件
#include <Qsci/qsciscintilla.h>
//以python语法作为例子,该语法分析器的头文件
#include <Qsci/qscilexerpython.h>
//设置代码提示功能,依靠QsciAPIs类实现
#include <Qsci/qsciapis.h>
3.2配置功能
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
QsciScintilla *editor=new QsciScintilla(this);
//设置语法
QsciLexerPython *textLexer = new QsciLexerPython;//创建一个词法分析器
editor->setLexer(textLexer);//给QsciScintilla设置词法分析器
//行号提示
editor->setMarginType(0,QsciScintilla::NumberMargin);//设置编号为0的页边显示行号。
editor->setMarginLineNumbers(0,true);//对该页边启用行号
editor->setMarginWidth(0,15);//设置页边宽度
//代码提示
QsciAPIs *apis = new QsciAPIs(textLexer);
apis->add(QString("import"));
apis->prepare();
editor->setAutoCompletionSource(QsciScintilla::AcsAll);//设置源,自动补全所有地方出现的
editor->setAutoCompletionCaseSensitivity(true); //设置自动补全大小写敏感
editor->setAutoCompletionThreshold(1); //设置每输入一个字符就会出现自动补全的提示
QVBoxLayout *pLayout = new QVBoxLayout(this);
pLayout->addWidget(editor);
pLayout->setContentsMargins(0,0,0,0);
}
这里需要注意,应该还要添加
#include <QVBoxLayout>
在当前文件的头文件下面。设置布局信息。
创建工程后 点击运行即可完成显示效果。
4.运行效果
疑问:
我的程序只能在Release下运行,并能使用Debug模式运行,请求各位大佬解惑。运行错误提示是
14:22:45: Starting G:\QT\build-MY_NEWcode-Desktop_Qt_5_13_0_MinGW_64_bit-Debug\debug\MY_NEWcode.exe ...
QWidget: Must construct a QApplication before a QWidget
14:22:53: 程序异常结束。
14:22:53: The process was ended forcefully.
14:22:53: G:/QT/build-MY_NEWcode-Desktop_Qt_5_13_0_MinGW_64_bit-Debug/debug/MY_NEWcode.exe crashed.
可以通过编译与链接,但是无法正常运行。