我有一个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现在是不可见的,但布局仍然保持不变。我怎么能改变它?
感谢。
答案 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");