将行设置为只读
Posted
技术标签:
【中文标题】将行设置为只读【英文标题】:setting line to read-only 【发布时间】:2014-03-15 18:43:55 【问题描述】:我一直在寻找QsciScintilla API,我想知道如何在文本编辑器中将一行设置为只读。我知道它提供了一个 setReadOnly 函数。但这会将整个文本编辑器设置为只读。
关于如何将一行设置为只读的任何建议?
我正在使用 PQT4 Python 3x
【问题讨论】:
我相信 QsciScintilla 为您提供了拦截用户操作的选项,不是吗?您也许可以使用它来否决用户的编辑:因此,如果用户按下 delete、bs 或某个键,您的函数会检查它是否在该行上是只读的,如果是,那么您的代码会拒绝用户操作事件。 @Schollii。但是,如果用户删除或覆盖了一大块恰好包含“只读”行的文本怎么办?你将如何防止这种情况发生? @ekhumoro 相同的策略:拦截删除选择,查看是否有任何选定的行是只读行之一,如果是,则拒绝。请注意,Pro-grammer 可能还有其他未提及的要求,例如使用 ok/cancel 显示警告等。 @Schollii。如果您在只读行上方删除或插入行,会发生什么?我认为仅跟踪用户行为是不够的。只读行需要附加一个标记(有一个现有的 API 可以做到这一点),以便可以跟踪它们的位置。但即使这样做了,还有许多其他内置的 Scintilla 功能需要禁用(或解决)以避免无意中破坏。使用 QTextEdit 比使用 QScintilla 更容易实现您的策略很多。 【参考方案1】:你真的不能这样做。底层 Scintilla 控件中有一个低级功能可以防止插入符号移动到文本区域 - 但它不能防止删除 包含“只读”的更广泛的文本区域部分。但即使这足以满足您的目的,此功能也只能应用于 styled 文本范围,而不是特定行。
如果您只想将一些只读文本与特定行关联,您可以使用annotation。
【讨论】:
谢谢你,你知道如何用另一行文本替换一行文本吗? @Pro-grammer。是的,但这取决于您所说的“替换”是什么意思。另一行是否在此过程中被删除? (这确实应该是一个新问题)。 是的,该行确实被删除了!以上是关于将行设置为只读的主要内容,如果未能解决你的问题,请参考以下文章