我真的被一项与 Qt GraphicsView 相关的任务所困扰。任何帮助或建议将不胜感激。在我的 QGraphicsView 应用程序中,我添加了一些可编辑的 QGraphicsTextItems 到场景中。我需要以下功能:
- 为 float 设置验证器,以便用户不会在该文本项中错误地输入字符或换行符。
- 用户更改文本后发出信号。
谁能建议我如何在我的应用程序中实现这一点?我真的很努力,但我找不到合适的东西。如果有任何替代方案或解决方法,我将不胜感激。
谢谢!
我真的被一项与 Qt GraphicsView 相关的任务所困扰。任何帮助或建议将不胜感激。在我的 QGraphicsView 应用程序中,我添加了一些可编辑的 QGraphicsTextItems 到场景中。我需要以下功能:
谁能建议我如何在我的应用程序中实现这一点?我真的很努力,但我找不到合适的东西。如果有任何替代方案或解决方法,我将不胜感激。
谢谢!
QGraphicsTextItem
不支持这种能力,我相信你已经发现了。所以你有几个选择:
focusOutEvent(QFocusEvent* event)
和/或keyReleaseEvent(QKeyEvent* event)
检测验证器何时需要运行。AQValidator
可以创建为您的文本类的成员,并在失去焦点和/或按下某个键时进行查询(回车键表示完成,或在每个字母上)。然后,当您认为编辑完成或更改时,只需为您创建一个自定义信号。GraphicsProxyWidget
来保存文本输入的“真实” QLineEdit
,只需使用验证器进行设置,就像放置在传统的 GUI 表单中一样。您需要将editingFinished()
ortextEdited(const QString& text)
信号从'转发'QLineEdit
到您的QGraphicsTextItem
,因此您不必提供对小部件的外部访问。QTextDocument
,QGraphicsTextItem
这是实际保存和格式化文本的内容(使用 访问它document()
)。但是它不支持QValidator
安装,因此您必须创建一个信号槽循环,当文本更改(contentsChanged()
由QGraphicsTextItem
更新QTextDocument
, 并再次触发此过程)或如果通过则忽略。两者都难以实施;第一个需要更多代码,但可以让您更好地控制文本框的视觉外观。