我真的很想完成与Qt GraphicsView相关的任务。任何帮助或建议将受到高度赞赏。 在我的QGraphicsView应用程序中,我有一些可编辑的QGraphicsTextItems,我已添加到场景中。我需要以下功能:
任何人都可以建议我如何在我的应用程序中实现这一点?我尝试过很努力,但我找不到合适的东西。如果有任何替代或解决方法,我将很高兴知道。
谢谢!
答案 0 :(得分:7)
QGraphicsTextItem
不支持此功能,因为我相信你已经发现了。所以你有几个选择:
focusOutEvent(QFocusEvent* event)
和/或keyReleaseEvent(QKeyEvent* event)
以检测验证程序何时需要运行。可以创建QValidator
作为文本类的成员,并在焦点丢失和/或按下键时查询(输入键表示完成,或在每个字母上)。然后在认为编辑完成或更改时,为您创建自定义信号。GraphicsProxyWidget
来保存“真实”QLineEdit
用于文本输入,只需使用验证器进行设置,就像放置传统的GUI表单一样。您需要将editingFinished()
或textEdited(const QString& text)
信号从QLineEdit
“转发”到您的QGraphicsTextItem
,这样您就不必提供对小部件的外部访问权限。< / LI>
QTextDocument
的内部QGraphicsTextItem
,这是实际拥有并格式化文本(使用document()
访问它)。但是,它不支持安装QValidator
,因此您必须创建一个信号槽循环,以便在文本更改时(由contentsChanged()
发出信号),QGraphicsTextItem
收到它,验证,如果验证失败(更新QTextDocument
,再次触发此过程),则更新/清除;如果通过,则忽略。两者都难以实施;第一个需要更多代码,但可以让您更好地控制文本框的视觉外观。