如何在QGraphicsLayout中获取隐藏的QGraphicsItem以放弃其空间?

时间:2012-12-19 15:51:29

标签: qt

我有一个QGraphicsLinearLayout,里面有一系列QGraphicsWidgets。我可以很好地隐藏小部件,但是布局会将所有剩余的小部件空间分开,好像隐藏的小部件仍然可见。如何让布局使用这个空间?

我的代码是这样的:

//scene is a QGraphicsScene*, myWidget# inherits QGraphicsWidget
scene->addItem(myWidget1);
layout->addItem(myWidget1);
scene->addItem(myWidget2);
layout->addItem(myWidget2)
scene->addItem(myWidget3);
layout->addItem(myWidget3)

//then later, I call
myWidget2->hide();

但是虽然myWidget2现在是不可见的,但布局仍然保持不变。我怎么能改变它?

感谢。

2 个答案:

答案 0 :(得分:2)

在隐藏窗口小部件后,尝试调用QGraphicsLinearLayout :: invalidate()来清除任何缓存的几何信息。如果这没有帮助,我会假设从布局中移除小部件(如果这对你来说可行)应该这样做。

答案 1 :(得分:-1)

我认为你在追求QWidget::findChild<T>(Qstring name) name - 可以使用QObject :: setObjectName(Qstring name)设置的对象名称 T - 是一种你喜欢的物体。
所以在你的情况下代码应该如下:

MyWidget* myWidget1 = new MyWidget(this);
myWidget1->setObjectName("myWidget1");
........
MyWidget* requiredWidget=scene->findChild<MyWidget*>("myWidget1");