4

我真的被一项与 Qt GraphicsView 相关的任务所困扰。任何帮助或建议将不胜感激。在我的 QGraphicsView 应用程序中,我添加了一些可编辑的 QGraphicsTextItems 到场景中。我需要以下功能:

  • 为 float 设置验证器,以便用户不会在该文本项中错误地输入字符或换行符。
  • 用户更改文本后发出信号。

谁能建议我如何在我的应用程序中实现这一点?我真的很努力,但我找不到合适的东西。如果有任何替代方案或解决方法,我将不胜感激。

谢谢!

4

1 回答 1

8

QGraphicsTextItem不支持这种能力,我相信你已经发现了。所以你有几个选择:

  1. 重新实现focusOutEvent(QFocusEvent* event)和/或keyReleaseEvent(QKeyEvent* event)检测验证器何时需要运行。AQValidator可以创建为您的文本类的成员,并在失去焦点和/或按下某个键时进行查询(回车键表示完成,或在每个字母上)。然后,当您认为编辑完成或更改时,只需为您创建一个自定义信号。
  2. 使用 aGraphicsProxyWidget来保存文本输入的“真实” QLineEdit,只需使用验证器进行设置,就像放置在传统的 GUI 表单中一样。您需要将editingFinished()ortextEdited(const QString& text)信号从'转发'QLineEdit到您的QGraphicsTextItem,因此您不必提供对小部件的外部访问。
  3. 您还可以使用 的内部QTextDocumentQGraphicsTextItem这是实际保存和格式化文本的内容(使用 访问它document())。但是它不支持QValidator安装,因此您必须创建一个信号槽循环,当文本更改(contentsChanged()QGraphicsTextItem更新QTextDocument, 并再次触发此过程)或如果通过则忽略。

两者都难以实施;第一个需要更多代码,但可以让您更好地控制文本框的视觉外观。

于 2013-06-13T08:12:56.377 回答