2012-03-20 4 views
1

이것은 Qt/C++로 프로그래밍 할 때의 질문입니다. 두 항목이있는 콤보 상자가 있습니다. 선택을위한 현재 인덱스가 0이면 콤보 상자 아래의 레이아웃에 QLineEdit가 표시되지 않아야합니다. 1이면 QLineEdit가 나타납니다. 인덱스가 다시 0이면 다시 사라집니다. 특히 레이아웃의 다른 요소가 변경의 영향을받지 않아야합니다. 다른 QineEdit에서 이미 사용자가 입력 한 값은 그대로 유지되어야합니다.Qt - QLineEdit을 동적으로 패널에 추가하십시오.

위젯을 동적으로 수정할 수 있습니까? 어떻게 한거야?

친절하게 제공합니다.

+0

무엇이 당신을 혼란스럽게 했습니까? 이 작업은 어떻게 든 복잡해 보이지 않습니다. – Lol4t0

답변

4

모든 QWidget 객체에는 hide()라는 함수가 있습니다.

콤보 상자의 currentIndexChanged 신호에 신호를 첨부 할 수 있으며,이 함수에서 염두에두고있는 논리를 구현하고 QLineEdit의 hide 메서드를 호출 할 수 있습니다.

이 접근법의 유일한 문제점은 숨겨진 Qt 위젯이 화면의 어떤 공간도 차지하지 않아 레이아웃을 변경시킬 수 있다는 것입니다 (레이아웃을 프로그래밍 한 방법, 다른 위젯 예를 들어 조금 움직일 수 있습니다.) QLineEdit이있는 곳에서 또 다른 위젯을 만들 수 있습니다. (아마도 show() 함수를 호출하고 LineEdit과 동일한 컨테이너에 'placeholder'를 두는 등) 공간을 차지하고 거기에 머물러야합니다. QStackedWidget을 사용하여 두 개의 위젯을 추가하고 색인을 변경할 수 있습니다.

다음 예제를 읽어 보는 것이 좋습니다. 동적 변경 작업에 대한 유용한 통찰력이 있습니다. Qt Extension Example.

또한 의심 스럽다면 다른 예제를 살펴보고 Qt에 대한 많은 중요한 주제를 다루고 있습니다.

코드로 행운을 빕니다.

+0

Answer and a half, 나는 단지 Qt Docs에 링크하려고했습니다, upvoted. –

+0

Tks Castilho. 그러나 hide() 또는 setVisible (true/false)와 함께 작동하지 않습니다. 나는 알아볼 수있는 예를주의 깊게 읽을 것입니다. 분명히 hide() 혼자가 적합하지 않기 때문에 필요한 경우 위젯을 다시 표시해야합니다. – octoback

관련 문제