news 2026/4/18 6:13:20

折腾代码编辑器是个技术活,尤其要兼顾灵活性和性能。QScintilla这玩意儿在Qt圈子里算是个隐藏Boss,今天带大伙看看咱魔改的编辑器怎么玩转代码编辑

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
折腾代码编辑器是个技术活,尤其要兼顾灵活性和性能。QScintilla这玩意儿在Qt圈子里算是个隐藏Boss,今天带大伙看看咱魔改的编辑器怎么玩转代码编辑

基于Qt的组件,Qscintilla的代码编辑器。 可有偿提供技术帮助,帮你开发和移植。 支持5种配色方案 本代码自定义的代码编辑器,可应用与任何语言、语法对以下源代码的更新进行说明 [功能] 1.支持自定义快捷键 2.支持自定义皮肤 3.代码高亮:支持自定义高亮规则,关键词等 4.自动补全:支持自动补全列表定义,可添加小图标 5.代码行号显示:根据行号文字大小自动改变栏目宽度,保证完全显示 6.断点调试:左侧栏可显示断点,和运行小图标 7.书签功能:可添加书签 8.支持列选,列修改,多选,多修改 9.支持代码注释,可选多段 10.跳转到指定行 11.文本查找,替换功能 12.支持放大缩小 13.代码折叠 14.可定义指示器 15.添加行和删除行是左侧栏指示颜色 16.提示信息 tooltip 17.翻译 18.加入代码格式化astyle 19.动态添加函数提示

先整点硬核的——自定义语法高亮。咱直接继承QsciLexer搞事情:

class MyLexer : public QsciLexerCustom { public: explicit MyLexer(QObject *parent=0) : QsciLexerCustom(parent) { // 整点骚颜色 setColor(QColor("#FF69B4"), 0); // 基佬紫关键词 } const char *language() const override { return "MyLang"; } QString description(int style) const override { if(style == 0) return "BadAssKeyword"; return QString(); } void styleText(int start, int end) override { // 正则逮住特定模式就上色 QString text = editor_->text(start, end); QRegularExpression rx("\\bfuck\\b"); //...匹配处理 } };

这骚操作能让你把脏话都高亮成基佬紫,适合祖安程序员(手动狗头)。

自动补全得玩出花来。注册个API提供器:

class CompletionProvider(QsciAPIs): def __init__(self, lexer): super().__init__(lexer) self.prepare() # 必须调用 def updateAutoCompletionList(self, context): # 动态添加当前上下文可能的函数 if "numpy" in context: self.add("np.牛逼函数()") self.sort()

配合这个,按Ctrl+Space弹出补全时还能带小图标。实测发现异步加载大词库时得注意线程安全,别整崩了。

调试功能最考验细节处理。断点管理这块儿得自己画侧边栏:

void Editor::paintEvent(QPaintEvent *e) { QsciScintilla::paintEvent(e); QPainter painter(viewport()); // 画断点红圈 foreach (int line, breakpoints) { int y = SendScintilla(SCI_POINTYFROMPOSITION, SendScintilla(SCI_GETLINESELPOSITION, line)); painter.drawEllipse(5, y-5, 10, 10); } }

这里要处理坐标转换,实测在代码折叠时容易翻车,得用SCI方法精确获取位置。

代码折叠是个精细活。配置参数得讲究:

editor.setFolding(QsciScintilla.BoxedTreeFoldStyle) # 盒子式折叠 editor.setFoldMarginColors(QColor("#2E3440"), QColor("#2E3440")) # 暗黑系边栏 editor.SendScintilla(QsciScintilla.SCI_SETPROPERTY, b"fold.compact", b"0") # 展开折叠符号

注意不同语言得配不同折叠策略,像Python这种靠缩进的得用特别处理。

文本操作必须够骚。列编辑模式直接调用:

// 按住Alt拖鼠标进入列选模式 editor.SendScintilla(QsciScintilla.SCI_SETADDITIONALSELECTIONTYPING, true); // 多光标批量修改 QList<QPair<int, int>> selections = { {pos1, pos2}, {pos3, pos4} }; editor.SendScintilla(QsciScintilla.SCI_SETSELECTIONS, selections.size(), selections.data());

这功能实测在处理CSV数据时爽到飞起,建议配个快捷键快速切换模式。

最后说说代码格式化。集成AStyle得注意参数:

QProcess formatter; QStringList args = { "--style=kr", "--indent=spaces=4", "--pad-oper", filePath }; formatter.start("astyle", args); // 捕获输出刷新编辑器

建议做成异步处理,大文件格式化时别卡界面。

(需要技术支持或定制开发可私信,老司机带你飙车)这编辑器在十万行级代码项目里实测流畅,配上自定义的VIM模式键位,妥妥的生产力工具。下回咱们聊聊怎么给它挂上LSP搞语义分析。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 3:25:01

导师推荐!专科生必备!10款一键生成论文工具TOP10测评

导师推荐&#xff01;专科生必备&#xff01;10款一键生成论文工具TOP10测评 2026年专科生论文写作工具测评&#xff1a;为什么你需要这份榜单&#xff1f; 随着高校教育的不断深化&#xff0c;专科生在学术写作方面的需求也日益增长。然而&#xff0c;面对繁重的课程任务与论文…

作者头像 李华
网站建设 2026/4/18 3:27:39

新手必看:JavaScript堆内存问题入门指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个交互式学习工具&#xff0c;通过简单的示例和逐步引导&#xff0c;帮助初学者理解JavaScript堆内存分配失败的常见原因&#xff08;如内存泄漏、大对象分配等&#xff09;…

作者头像 李华
网站建设 2026/4/18 3:30:20

Neo4j图数据库学习(二)——SpringBoot整合Neo4j

一. 前言 本文介绍如何通过SpringBoot整合Neo4j的方式&#xff0c;对图数据库进行简单的操作。 Neo4j和SpringBoot的知识不再赘述。关于Neo4j的基础知识&#xff0c;有兴趣可以看看作者上一篇的文章&#xff1a;Neo4j图数据库学习(一)——初识CQL 二. 前置准备 新建SpringBo…

作者头像 李华
网站建设 2026/4/18 2:10:39

nginx 代理 redis

kubernetes 发布的redis服务端口为 31250 通过命令查询 [miniecs-88500735 /]$ minikube service redis --url http://192.168.49.2:31250[rootecs-88500735 /]# vi /etc/nginx/nginx.conf配置nginx.conf stream {upstream redis {server 192.168.49.2:31250;}server {listen 6…

作者头像 李华
网站建设 2026/4/18 8:04:52

背调软件如何重塑企业人才风控的底层逻辑

在信息高度不对称的招聘市场中&#xff0c;一份精心修饰的简历可能隐藏着企业难以承受的风险。近年来&#xff0c;超过60%的企业在招聘中层以上岗位时遭遇过履历信息失实的情况&#xff0c;其中近三分之一因此遭受了直接经济损失。当传统的人工背调在效率与深度之间陷入两难时&…

作者头像 李华