昭通市网站建设_网站建设公司_安全防护_seo优化
2026/1/10 0:15:22 网站建设 项目流程

基于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搞语义分析。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询