【问题标题】:Check if a textEdited() signal is emitted due to an Undo operation in a QLineEdit检查是否由于 QLineEdit 中的撤消操作而发出 textEdited() 信号
【发布时间】:2014-06-05 17:11:04
【问题描述】:

当发出textEdited() 信号时,可能是因为用户键入/粘贴/删除/替换了某些文本,也可能是撤消操作(用户按了 Ctrl+Z,或从上下文菜单)。

我需要以某种方式区分它们。有没有办法在执行撤消操作时得到通知 - 订阅信号,也许捕获事件?我自己在 QLineEdit 文档中找不到任何内容,但我可能错过了。

或者有没有办法简单地检查是否已执行撤消 - 可能是一个标志,或者有没有办法检查撤消堆栈的大小?这样我可以比较它以前的大小,如果它减小了,那么我就知道它是一个 Undo。

如果你想知道我为什么需要这个,我正在尝试实现Editable multi-color QLineEdit,我需要这个以便在撤消操作时恢复以前的颜色。

【问题讨论】:

  • 为什么不使用 QTextEdit?我认为“撤消”与文本编辑是相同的法律行为。
  • 因为我需要一个 QLineEdit 来实现我的目的。如果我需要一个多行小部件,我会使用 QTextEdit。但是,“相同的法律行动”是什么意思?
  • 法律 == QLineEdit 在文本编辑方式之间没有区别:用户取消输入、编程方式、撤消/重做等。

标签: c++ qt undo


【解决方案1】:

QLineEdit 专为纯文本编辑而设计。它不是为支持高级格式而设计的。您应该改用QTextEdit。网上有a lot of samples,怎么办。

如果你想练习创建自定义文本编辑器,那么你应该自己实现必要的接口(方法、信号)。

【讨论】:

  • 谢谢,但我真的不能使用 QTextEdit。它们是不同的,就像告诉我使用 QComboBox 而不是 QLineEdit。另外,你不会试图回答我的问题。我不问是否应该使用 QTextEdit 而不是 QLineEdit,我问我是否可以检查 QLineEdit 中是否发生了 Undo 操作。这是我的问题。
  • 我的正确答案是——你不能。我希望,你能解释一下,为什么你不能使用 QTextEdit?这就像说“我想要一个复选框,而不是 QCheckBox”
  • 顺便说一句,我测试了您链接到的单行 QTextEdit 示例,但它对我不起作用 - 我需要插入的文本始终为黑色,而在使用富文本格式时,它是周围文本的颜色。此外,在 QLineEdit 中,当您使用光标到达小部件的左端或右端时,它会将其移动半个小部件长度,因此光标位于中心。在您的示例中,它只移动一次,这不是相同的行为。谁知道这是否可能,我已经实现了一个支持颜色的 QLineEdit。它只是不能很好地与 Undo 配合使用。
猜你喜欢
  • 2013-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-10
  • 1970-01-01
  • 2015-12-08
  • 2012-10-03
相关资源
最近更新 更多