Qt可编辑的QGraphicsTextItem验证文本并在更改时发出信号



我真的卡住与Qt GraphicsView任务。任何帮助或建议将非常感谢。在我的QGraphicsView应用程序中,我有一些可编辑的qgraphicstextitem,我已经添加到场景中。我需要以下功能:

  • 设置float的验证器,这样用户就不会错误地在文本项中输入一个字符或新行。
  • 当用户修改文本时发出信号。

谁能建议我如何在我的应用程序中实现这一点?我已经很努力了,但还是找不到合适的工作。如果有任何替代方案或变通办法,我将不胜感激。

谢谢!

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

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

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

相关内容

  • 没有找到相关文章

最新更新