gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:55:26 28 4
gpt4 key购买 nike

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

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

  • 任何人都可以建议我如何在我的应用程序中实现它?我真的很努力,但我找不到任何合适的东西。如果有任何替代方法或解决方法,我将不胜感激。

    谢谢!

    最佳答案

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

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

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

    关于Qt 可编辑 QGraphicsTextItem 验证文本并在更改时发出信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17079535/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com