如何将QLabel添加到QGraphicsItem



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

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

若要将任何基于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添加为类的成员并调用其相关函数,但将其添加为子函数可能要简单得多。

QGraphicsTextItem::setTextInteractionFlags (Qt::TextInteractionFlags flags)

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

有关详细信息,请查看以下链接:实现详细信息

如果您需要一些特定的行为或只使用QGraphicsProxyWidget,则需要通过扩展QGraphicsProxyWidget来创建一个代理小部件。看看Qt SDK和QGraphicsProxyWidget文档中的"嵌入式对话框"示例。它已经存在很长时间了,所以它应该适合您的版本。我希望这能有所帮助。

相关内容

  • 没有找到相关文章

最新更新