news 2026/8/16 7:07:05

折腾代码编辑器是个技术活,尤其要兼顾灵活性和性能。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/8/9 16:55:14

强烈安利自考必用TOP10 AI论文平台

强烈安利自考必用TOP10 AI论文平台 2026年自考论文写作工具测评&#xff1a;为何需要一份精准榜单&#xff1f; 随着自考人数逐年增长&#xff0c;论文写作成为许多考生面临的“拦路虎”。从选题困难到资料查找繁琐&#xff0c;再到格式规范不熟、改稿效率低下&#xff0c;每一…

作者头像 李华
网站建设 2026/8/1 20:29:22

深度剖析vivado2023.2下载安装教程对Artix-7的支持细节

Vivado 2023.2 还支持 Artix-7 吗&#xff1f;一文讲透安装、配置与实战避坑 你是不是也遇到过这种情况&#xff1a;手头项目还在用 Artix-7&#xff0c;开发板是 Nexys4 或者自研的 xc7a100t&#xff0c;结果想升级到新版 Vivado 却犹豫不决—— 新工具还支不支持老器件&…

作者头像 李华
网站建设 2026/8/11 7:21:11

提取视频文稿

链接&#xff1a;https://pan.quark.cn/s/a2e1724889fb一个功能强大的在线视频处理工具&#xff0c;提供多种实用功能&#xff0c;包括AI语音识别、视频转文字、音频提取和水印添加等。可以通过该网站轻松提取视频中的语音内容并生成准确的文字稿&#xff0c;支持多种语言识别。…

作者头像 李华
网站建设 2026/8/2 11:09:10

完整指南:elasticsearch下载和安装全流程演示

从零开始搭建 Elasticsearch&#xff1a;一次说清下载、安装与避坑全流程 你有没有遇到过这样的场景&#xff1f;项目需要实现全文搜索&#xff0c;或者要搞日志分析平台&#xff0c;技术选型定了 Elasticsearch&#xff0c;但刚打开官网就懵了——版本这么多&#xff0c;该下…

作者头像 李华
网站建设 2026/8/9 20:45:23

UDS 31服务与27服务协同工作的机制说明

UDS 31服务与27服务如何协同守护车载系统安全&#xff1f;在现代汽车电子架构中&#xff0c;ECU&#xff08;电子控制单元&#xff09;的数量和复杂度呈指数级增长。从动力总成到车身控制&#xff0c;再到智能座舱与自动驾驶模块&#xff0c;每一个ECU都承载着关键功能。随之而…

作者头像 李华
网站建设 2026/8/10 5:27:51

最新面向自然科学领域机器学习与深度学习技术

随着观测技术、数值模拟与计算基础设施的迅猛发展&#xff0c;地球系统科学、生态学、环境科学等自然科学领域正迈入“大数据智能模型”驱动的新阶段。传统的统计建模方法虽具可解释性&#xff0c;却难以应对高维、非线性、多源异构的复杂自然系统&#xff1b;而以机器学习和深…

作者头像 李华