3

一連の QGraphicsWidgets を含む QGraphicsLinearLayout があります。ウィジェットをうまく非表示にすることはできますが、レイアウトは、非表示のウィジェットがまだ表示されているかのように、残りのすべてのウィジェットのスペースを広げます。このスペースを使用するレイアウトを取得するにはどうすればよいですか?

私のコードは次のようなものです:

//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 に答える