【问题标题】: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 更容易实现您的策略很多

标签: pyqt pyqt4 scintilla


【解决方案1】:

你真的不能这样做。底层 Scintilla 控件中有一个低级功能可以防止插入符号移动到文本区域 - 但它不能防止删除 包含“只读”的更广泛的文本区域部分。但即使这足以满足您的目的,此功能也只能应用于 styled 文本范围,而不是特定行。

如果您只想将一些只读文本与特定行关联,您可以使用annotation

【讨论】:

  • 谢谢你,你知道如何用另一行文本替换一行文本吗?
  • @Pro-grammer。是的,但这取决于您所说的“替换”是什么意思。另一行是否在此过程中被删除? (这确实应该是一个新问题)。
  • 是的,该行确实被删除了!
猜你喜欢
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
  • 2020-06-11
  • 2016-05-16
  • 2012-10-19
  • 1970-01-01
相关资源
最近更新 更多