2013-04-18 2 views
1

내 프로젝트에서 위와 아래에 다른 요소가 숨겨져 있어야하는 몇 가지 요소가있는 그룹 상자가 있습니다. setHidden (true)을 사용하여 해당 요소를 숨기면 요소는 숨겨 지지만 다른 요소 사이에는 큰 공간이 남습니다.요소를 숨긴 후 그룹 상자의 크기를 조정 하시겠습니까?

이러한 요소를 숨긴 후에 그룹 상자를 압축하여 큰 공간이 없으면 어떻게 할 수 있습니까?

+0

그룹 상자에서 어떤 레이아웃 유형을 사용하고 있습니까? – cmannett85

답변

0

이유는 invalidate()에 없습니다. GroupBox 콘텐츠가 부적절하게 레이아웃 되었기 때문입니다. 어떤 QWidget을 hide() 또는 show()하면 QT는 가시성 변경의 영향을받을 수있는 최상위 부모까지 모든 항목을 자동으로 무효화합니다. 따라서 QGroupBox에 레이아웃이 누락되어 있으므로 요소를 숨기면 QGroupBox 지오메트리와 관련하여 아무 것도 변경되지 않으므로 예상되는 스트레칭이 표시되지 않습니다.

+0

'부적절한 레이아웃'이 무슨 뜻인지 잘 모르겠습니다. QT Designer에서 'Grid in Layout'버튼을 사용했습니다. 죄송합니다. 업무용 프로젝트이므로 코드를 게시 할 수 없습니다. – Sam

+1

글쎄, 그리드 레이아웃의 경우 약간 까다 롭습니다. 칼럼 1에 라벨이있는 그리드 2x2와 칼럼 2에 라인 편집이 있다고 가정 해 봅시다. 행을 축소하려면 라벨과 라인 편집을 모두 숨겨야합니다. 그리드 내부에있는 모든 행의 컨트롤을 숨겨야합니다. 같은 방법으로 그룹 상자는 레이아웃 자체 내에 있어야하며 예를 들어 세로로 접어 넣으려면 아래에 스트레치 요소가 있어야합니다. 따라서 그룹 상자에서 요소가 사라지면 스트레치가 더 확장되어 그룹 상자가 더 작아집니다. – evilruff

+0

당신은 정확합니다. 당신이 묘사 한 것처럼 설정 했었습니다. 그룹 상자는 밑에 스페이서가있는 레이아웃 안에있었습니다. 나는 요소들을 숨긴 후에 붕괴되지 않았다고 믿는다. 왜냐하면 요소들의 왼쪽에 다른 요소들과 약간 상쇄되기위한 스페이서 (spacer)가 있었기 때문이다. 스페이서에 setHidden 함수가 있다고 생각하지 않기 때문에 스페이서가 숨겨지지 않았습니다. 이 문제를 해결하기 위해 자신의 그룹 상자 안에 숨겨진 (스페이서 포함) 필요가있는 모든 것을 넣은 다음 필요할 경우 해당 그룹 상자를 숨길 수 있습니다. 당신의 도움을 주셔서 감사합니다! – Sam

0

코드가 없으면 누락 된 부분을 추측하기가 약간 어렵습니다.

상자를 숨긴 후 그룹 상자를 잡고있는 레이아웃에서 QLayout::invalidate()을 시도 했습니까?

관련 문제