2012-10-14 3 views
1

2 개의 QLayouts으로 내 문제의 해결책을 찾지 못했습니다. 새로운 위젯, 푸시 버튼을 추가 할 때 가능한 expandind와 함께 QHBoxLayout으로 앱이 필요합니다. 그래서 내가 갖고있는 것 : QDialog과 두 개의 레이아웃이 있습니다. 이제 레이아웃을 숨길 수 없다는 것을 알고 있습니다. 그래서 난 그냥 트레이 :Qt hide QLayout (두 레이아웃 사이를 전환)

layout()->removeItem(firstlayout); 
layout()->addLayout(secondLayout); 

을하지만 난 이런 짓을 할 때, 나는 possition [0,0]에서 첫 번째 레이아웃에있는 모든 항목을 보았다. 그래서 다음 단계는 내가 시도 :

for (all items in first layout) if (widget) widget->hide(); 

그러나 이것은 단지 QWidget와 협력 내가 레이아웃의 여러 가지 항목이있다.

hide/show를 사용할 수 있기 때문에 간단하게 위젯을 사용하지만 새 항목을 추가 할 때 자동 확장 창이 필요합니다.

답변

1

레이아웃을 다시 작성하기 만하면 두 레이아웃을 동시에 유지할 필요가 없습니다. 아마도 가장 확실한 것은 현재 레이아웃을 먼저 삭제 한 다음 새로운 레이아웃을 만들고, 위젯을 추가하고, 숨기고 싶은 모든 위젯을 숨기고, 현재 레이아웃으로 설정하는 두 가지 이상의 메소드를 갖는 것입니다. QWidget은 어쨌든 그것을 가지며 setter와 getter를 제공하기 때문에 레이아웃을위한 멤버 변수를 유지할 필요조차 없다는 것에주의하십시오.

다른 레이아웃의 다른 위젯을 사용하고 실제로 "페이지 전환"이 가능하도록하려면 QStackedWidget을 사용하면됩니다. 또는 고정 된 부분 (버튼 등)을 누른 다음 "페이지"로 구성한 다음 "페이지"를 QStackedWidget에 넣고 고정 부분을 빠져 나오십시오.

+0

Ok QStakedWidget은 괜찮습니다.하지만이 위젯 QVBoxLayout에이 레이아웃을 추가하면 많은 버튼이 나타납니다. QStickWidget은 QVBoxLayout 확장에 따라 확장됩니까 (버튼이 고정 높이를 설정 한 경우)? – Lodhart

0

'addLayout (secondLayout/firstLayout)'은 다른 레이아웃을 자동으로 제거하므로 제거하지 않아도됩니다. 레이아웃 (앞에서 addWidget()을 가짐)에 대한 포인터를 유지한다면 나중에 레이아웃과 위젯을 사용할 수 있습니다. :)

+0

하지만 이것은 레이아웃에 대한 것일 뿐이며 사용되지 않은 레이아웃에서는 모든 위젯을 숨기지 않습니다. 그렇습니까? – Lodhart

+0

있습니다. 너 해봤 어? 나는 최근에 Qt를 많이 사용합니다. . :) – Al2O3

관련 문제