从 QPlainTextEdit 子类化的 Qt 小部件中的代码折叠?

Posted

技术标签:

【中文标题】从 QPlainTextEdit 子类化的 Qt 小部件中的代码折叠?【英文标题】:Code folding in a Qt widget subclassed from QPlainTextEdit? 【发布时间】:2011-05-31 19:44:36 【问题描述】:

我需要为我的小部件实现类似 Qt Creator 的代码折叠功能。它是 QPlainTextEdit 的子类,带有一些额外的语法高亮和行号。它应该在某些环境声明语句之间以及用户请求再次显示它们时隐藏文本。行号不应受到影响。例如 .begin[signal] 和 .end[signal] 之间的文本。当用户单击位于数字行旁边的细竖条上的小 ▼ 时,应该隐藏,然后再次单击 ▶ 将显示文本。 (如 Qt Creator、Eclipse 和大多数其他 IDE)

问题是我无法隐藏行并找到管理行号显示的方法以避免陷阱。有什么建议吗?

【问题讨论】:

【参考方案1】:

为什么不改用QScintilla?它是一款久经考验的具有折叠功能的编辑器。

要使用您自己的规则进行折叠,您需要通过将QsciLexer 的QsciLexerCustom 子类化来制作自己的词法分析器。我建议研究现有的词法分析器。即使您决定不使用 QScintilla,您也需要为您的规则实现相同的功能。

【讨论】:

我想按照自己的规则折叠文本。 QScintilla 可以吗? 目前我正在使用 GNU srchighlite 及其 Qt 端口 srchighlite-qt 进行语法高亮显示。转移到 QScintilla 我应该用 QScintilla 的高亮机制替换高亮机制,这需要时间和精力......谢谢你:)

以上是关于从 QPlainTextEdit 子类化的 Qt 小部件中的代码折叠?的主要内容,如果未能解决你的问题,请参考以下文章

QT软件开发: QPlainTextEdit当做日志显示窗口

Qt中的QLineEdit,QTextEdit和QPlainTextEdit的区别

Qt5 QPlainTextEdit怎么设置背景颜色和文字的颜色

没有子类化的 QOpenGLWidget

Qt5:使用 QSortFilterProxyModel 时的拖放

QT自定义控件消息实现