【问题标题】:How to add QLabel to QGraphicsItem如何将 QLabel 添加到 QGraphicsItem
【发布时间】:2013-08-17 04:36:23
【问题描述】:

我有一个QGraphicsItem,上面有文字。我希望这个文本是可编辑的,这样如果用户双击它,它将进入编辑模式。似乎最简单的方法是将文本更改为 QLineEdit 并让用户在完成后单击焦点或按 Enter。

如何将QLineEdit 添加到QGraphicsItem?我已经对QGraphicsItem 进行了子类化,所以我可以访问它的内部。

【问题讨论】:

    标签: c++ qt qt4 qgraphicsview qgraphicsitem


    【解决方案1】:

    要将任何基于QWidget 的对象添加到QGraphicsScene,需要QGraphicsProxyWidget

    当您在QGraphicsScene 上调用函数addWidget 时,它会将小部件嵌入到QGraphicsProxyWidget 中并将QGraphicsProxyWidget 返回给调用者。

    QGraphicsProxyWidget 将事件转发到它的小部件并处理不同坐标系之间的转换。

    既然您正在考虑在QGraphicsScene 中使用QLineEdit,您需要决定是否要直接添加它:

    QGraphicsScene* pScene = new QGraphicsScene;
    QLineEdit* pLineEdit = new QLineEdit("Some Text");
    
    // add the widget - internally, the QGraphicsProxyWidget is created and returned
    QGraphicsProxyWidget* pProxyWidget = pScene->AddWidget(pLineEdit);
    

    或者只是将其添加到您当前的QGraphicsItem。 在这里,您可以将其添加为 QGraphicsItem 的子项:

    MyQGraphicsItem* pMyItem = new MyQGraphicsItem;
    QGraphicsProxyWidget* pMyProxy = new QGraphicsProxyWidget(pMyItem); // the proxy's parent is pMyItem
    pMyProxy->setWidget(pLineEdit); // adding the QWidget based object to the proxy
    

    或者您可以将QGraphicsProxyWidget 添加为类的成员并调用其相关函数,但将其添加为子类可能要简单得多。

    【讨论】:

      【解决方案2】:
      QGraphicsTextItem::setTextInteractionFlags (Qt::TextInteractionFlags flags)
      

      API 可以使用。但是你需要在里面创建QGraphicsTextItem

      详情请查看以下链接:Implementation details

      【讨论】:

      • @Freedom_Ben QLineEdit 是一个 QWidget,所以如果你想要 QLineEdit 而不是 QGraphicsTextItem 。那么最好采用“mhcuervo”已经回答的不同方法。
      • 这实际上是一个很好的答案,因为大多数人都忽略了这个功能,并且添加 QWidgets 和相关的代理项是一个完整的其他蠕虫罐,如果您正在寻找简单性,您可能不想进入,更不用说整体性能了。
      【解决方案3】:

      您需要通过扩展QGraphicsProxyWidget 来创建代理小部件,以防您需要某些特定行为或仅使用QGraphicsProxyWidget。查看 Qt SDK 中的“嵌入式对话框”示例和QGraphicsProxyWidget 文档。它已经存在了很长时间,所以它应该适用于您的版本。我希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2014-12-05
        • 1970-01-01
        • 2018-05-31
        • 1970-01-01
        • 2018-02-04
        • 2015-04-17
        • 2014-02-27
        • 2022-01-15
        • 1970-01-01
        相关资源
        最近更新 更多