在Sublime Text中,如果在单击时按住控件,则可以向文档中添加另一个光标,从而可以一次在多个位置键入和编辑。我正在尝试使用Qt的QPlainTextEdit重新创建它。逻辑似乎很简单...
在 Ctrl + click 上,在点击位置创建并存储新光标
绘制所有光标
当发生任何键事件时,请确保其他光标也收到了它们
但是,似乎要执行这些操作,我必须确切地了解QPlainTextEdit的工作方式,尽管我对此有一个松散的了解,但我发现源非常密集且难以导航。
尽管此功能对我来说非常重要,但我不能花一个月的时间。我不知道如何合理地进行。是否有一些使用Qt构建的具有此功能的开源文本编辑器?实际上,可以在不完全了解QPlainTextEdit的工作原理的情况下实现它吗?我还没有考虑其他解决方案吗?我认为这是微不足道的,或者至少有人以前曾经解决过,但是事实并非如此。任何建议表示赞赏。
答案 0 :(得分:2)
是否有一些使用Qt构建的具有此功能的开源文本编辑器?
QtCreator是开源的(source code),具有部分多光标功能。尽管它不支持Ctrl + Click来添加新的光标,但是您可以执行Shift + Alt + DownArrow来将光标添加到下一行(同一列),就像在SublimeText中一样,然后一次将文本插入所有行。
似乎在其类TextEditorWidget中实现了该类,该类继承了QPlainTextEdit并重新实现了其许多虚拟方法。我不完全知道他们是如何实现多光标功能的,但是查看TextEditorWidget的代码可能会给出提示。
但是,请记住,QtCreator没有像Sublime Text或CLion中那样具有完整的多光标功能:多个光标必须在同一列中,并且不能左右移动多个光标。例如,我经常在Sublime中做的事情是在行的开头进行多项选择,然后按Ctrl + RightArrow将所有光标“右移一个单词”。截至2020年8月,您无法在QtCreator中做到这一点。
有一个开放的功能请求,要求在QtCreator中具有真正的多光标功能:
答案 1 :(得分:1)
但是,看来为了做这些事情,我必须 确切了解QPlainTextEdit的工作原理,而我却松了一口气 理解后,我发现来源非常密集且难以 导航。
在某种程度上,但不是很多。一旦获得光标位置,便知道文档中需要插入文本的位置。 QTextEdit已经支持多个光标位置:
https://doc.qt.io/qt-5/richtext-cursor.html
丰富的文本文档可以具有多个与之关联的光标, 并且每个都包含有关其在广告中的位置的信息 文档及其可能包含的所有选择。基于游标 范式会执行常见的操作,例如剪切和粘贴文本, 易于通过编程实现,但同时也允许更复杂 对文档执行的编辑操作。
和
多个光标
多个光标可用于同时编辑同一文档, 尽管在QTextEdit小部件中只有一个对用户可见。 QTextDocument确保每个光标正确写入文本,并且 不会干扰其他任何人。
由于此功能已经存在,因此阅读文档和实现该功能可能并不那么困难。
由于QPlainTextEdit是通过使用QTextEdit和QTextDocument背后的大多数技术实现的,因此也许会满足您的要求。