2

Sublime Text中,如果您在单击时按住控件,则可以将另一个光标添加到文档中,从而允许您一次在多个位置键入和编辑。我正在尝试使用 Qt 的 QPlainTextEdit 重新创建它。逻辑似乎很简单...

  • Ctrl+click上,在单击的位置创建并存储一个新光标

  • 绘制所有光标

  • 当任何关键事件发生时,确保其他游标也收到它们

但是,似乎为了做这些事情,我必须准确了解 QPlainTextEdit 的工作原理,虽然我有一个松散的理解,但我发现源代码非常密集且难以导航。

虽然这个功能对我来说非常重要,但我不能花一个月的时间在上面。我不知道如何合理地进行。是否有一些使用 Qt 构建的具有此功能的开源文本编辑器?我实际上可以在不彻底了解 QPlainTextEdit 的工作原理的情况下实现它吗?还有其他我没有考虑过的解决方案吗?我认为这将是微不足道的,或者至少有人可能以前解决过它,但事实并非如此。任何建议表示赞赏。

4

2 回答 2

2

是否有一些使用 Qt 构建的具有此功能的开源文本编辑器?

QtCreator 是开源的(源代码)并具有部分多光标功能。虽然它不支持 Ctrl+Click 添加新光标,但您可以使用 Shift+Alt+DownArrow 将光标添加到下一行(同一列),就像在 SublimeText 中一样,然后一次将文本插入所有行。

它似乎在他们的类TextEditorWidget中实现,它继承了 QPlainTextEdit 并重新实现了它的大量虚拟方法。我不完全知道他们如何实现多光标功能,但可能查看 TextEditorWidget 的代码可以给出提示。

但是,请记住,QtCreator 不像 Sublime Text 或 CLion 那样具有完整的多光标功能:多个光标必须在同一列中,并且您不能向左/向右移动多个光标。例如,我在 Sublime 中经常做的事情是在行首多选,然后按 Ctrl+RightArrow 将所有光标“向右一个单词”跳转。自 2020 年 8 月起,您无法在 QtCreator 中执行此操作。

在 QtCreator 中有一个开放的功能请求,要求具有真正的多光标功能:

https://bugreports.qt.io/browse/QTCREATORBUG-16013

于 2020-08-16T18:46:17.403 回答
1

然而,似乎为了做这些事情,我必须确切地了解 QPlainTextEdit 的工作原理,虽然我有一个松散的理解,但我发现源非常密集且难以导航。

在一定程度上,但不是很多。获得光标位置后,您就知道文档中需要插入文本的位置。QTextEdit 已经支持多个光标位置:

https://doc.qt.io/qt-5/richtext-cursor.html

富文本文档可以有多个与之关联的光标,每个光标都包含有关它们在文档中的位置以及它们可能包含的任何选择的信息。这种基于光标的范例使常见操作(例如剪切和粘贴文本)易于以编程方式实现,但它也允许对文档执行更复杂的编辑操作。

多个光标

可以使用多个光标同时编辑同一个文档,尽管在 QTextEdit 小部件中用户只能看到一个。QTextDocument 确保每个光标正确地写入文本并且不会干扰任何其他光标。

由于此功能已经存在,因此阅读文档并实现该功能可能并不像想象的那么困难。

由于 QPlainTextEdit 是使用 QTextEdit 和 QTextDocument 背后的大部分技术实现的,也许它会满足您的要求。

于 2020-08-15T01:47:56.967 回答