首页 新闻 会员 周边 捐助

QTextEdit 监听文本块增减

0
悬赏园豆:20 [已解决问题] 解决于 2024-08-19 14:36

我想使用 QTextEdit 实现一个代码编辑器。目前我基于 QCodeEditor 实现了断点功能,但我注意到如果断点所在的行之前被插入行的话,我需要处理这个事件并修改当前断点的行号。我想寻求一个比较简单的方案。

当然你有一个更好的基于 QT widgets 的方案也可以告诉我。

注:QsciScintilla 不考虑,它在高分辨率的显示屏下光标错位及其严重,好像还是老早就提及的 Bug,虽然这个功能确实强,但这个 Bug 是硬伤。

寂静的羽夏的主页 寂静的羽夏 | 老鸟四级 | 园豆:2129
提问于:2024-08-18 23:25
< >
分享
最佳答案
0

来自edyuk开源项目的qcodeedit2,是基于 C++ QT4 Widgets 的组件,提供了很好的支持。协议为 GPL,QT5 兼容性还行,QT6 不行,还有点 Bug ,不适配主题,不过不是大问题了。下图是经过我 Bug 修复和 QT5 API 兼容性修改和 CMake 支持的版本效果图:

寂静的羽夏 | 老鸟四级 |园豆:2129 | 2024-08-19 14:36
其他回答(1)
-1

基于你的需求,使用QTextEdit实现一个代码编辑器是可行的。对于处理插入行对断点行号的影响,以下是一个比较简单的解决方案:

  1. 当你在编辑器中插入新行时,通过重写QTextEdit的insertPlainText()或insertPlainText()函数来捕获这个事件。
  2. 在捕获到插入行事件时,你可以获取断点的列表,并且遍历这个列表来检查是否有断点在插入行之前。如果是,则需要修改这些断点的行号。
  3. 要修改断点的行号,你可以使用QTextEdit的document()函数获取到编辑器的文档对象,然后使用文档对象的各种方法来操作断点所在的行。
    当然,这只是一个简单的方案,并且需要根据你的实际需求进行自定义和扩展。另外,如果你寻求一个更高级且功能更强大的基于QT Widgets的方案,你可以考虑使用QScintilla。尽管你提到了它的一个已知的Bug,在高分辨率显示屏上可能会导致光标错位,但它在其他方面提供了很多功能和优点。
收获园豆:20
Technologyforgood | 园豆:7541 (大侠五级) | 2024-08-19 07:50

你这也太 AI 了,回答和不回答没啥区别。

支持(0) 反对(0) 寂静的羽夏 | 园豆:2129 (老鸟四级) | 2024-08-19 12:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册