gpt4 book ai didi

c++ - 如何获取QGraphicsScene的小部件(QGraphicsProxyWidget)?

转载 作者:太空宇宙 更新时间:2023-11-04 13:27:40 25 4
gpt4 key购买 nike

我正在使用 QGraphicsScene 并通过隐式创建向其添加常规小部件(QLineEditQComboBox 等) QGraphicsProxyWidget 对象:

m_pLineEdit = new QLineEdit("", 0);
m_pProxy = m_pGraphicsScene->addWidget(m_pLineEdit);

我目前正在寻找一种方法,以便稍后再次从场景中检索这些小部件以进行处理,但找不到。

我已经尝试了以下方法:

  1. 由于我无法将图形场景作为父级传递给小部件构造函数,因此通过 m_pGraphicsScene->findChildren(QLineEdit*) 检索小部件不起作用,因为没有直接关系。
  2. 图形场景确实有一个 QGraphicsSceneBspTreeIndex 子级,但这不是官方 Qt API 的一部分,因此不能依赖它。

底线:如何从 Qt 图形场景中获取所有 QGraphicsProxyWidget 对象?这可以在 Qt 标准中完成,还是我必须继承 QGraphicsScene 并尝试自己管理小部件?

最佳答案

Bottom-line: How can I get all the QGraphicsProxyWidget objects from a Qt graphics scene?

通过 scene->items() 获取场景中所有项目的列表,然后检查它们是否属于正确的类:

// Horrible C++98 code which doesn't even feature algorithms

QList<QGraphicsItem *> items = scene->items();
foreach (QGraphicsItem *item, items) {
QGraphicsProxyWidget *w;
if (w = qgraphicsitem_cast<QGraphicsProxyWidget *>(item)) {
use(w);
}
}

但是,我想强调的是,您应该真正跟踪您放置在场景中的元素。 (至少,您以后有兴趣使用的那些)。走过现场并检索这样的项目似乎非常脆弱,这是代码质量差和设计差的信号。请注意,您有 addWidget 调用返回的代理,只需将其保存在某处即可。

关于c++ - 如何获取QGraphicsScene的小部件(QGraphicsProxyWidget)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32801780/

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