3

我有一个 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 现在是不可见的,但布局仍然是间隔开的,就好像它在那里一样。我该如何改变呢?

谢谢。

4

2 回答 2

2

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

于 2012-12-19T16:47:26.380 回答
-1

我认为您正在寻找QWidget::findChild<T>(Qstring name)
名称 - 可以使用 QObject::setObjectName(Qstring name)
T 设置的对象名称 - 是您正在寻找的对象类型。
因此,在您的情况下,代码应如下所示:

MyWidget* myWidget1 = new MyWidget(this);
myWidget1->setObjectName("myWidget1");
........
MyWidget* requiredWidget=scene->findChild<MyWidget*>("myWidget1");
于 2012-12-19T16:26:44.627 回答