2012-08-13 5 views
2

나는 QT 느낌을 받고 싶고 작은 16 진수 편집기를 작성하기로 결정했습니다. 이를 위해서는 스크롤을 허용하는 위젯이 필요합니다. 몇 가지 연구 끝에 QTextEdit은 QAbstractScrollArea에서 파생된다는 것을 알게되었습니다. QAbstractScrollArea의 문서를 읽을 때 "QAbstractScrollArea가 주어진 위젯의 소유권을 가져올 것입니다."라는 설명과 함께 "setViewport()"메소드를 찾았습니다. 이것은 자체적으로 표시되는 위젯 컨텍스트에 맞지 않습니다. QScrollArea 컨텍스트에서만 적합합니다.QAbstractScrollArea에서 파생

자체 콘텐츠를 표시하는 스크롤 막대가 포함 된 위젯을 만들려면 QT에서 적절한 방법은 무엇입니까?

답변

2

QAbstactScrollArea 아무것도 "그 자체"를 표시 할 수 있으며, 문서는 명확하게한다고 :

QAbstractScrollArea이 스크롤 영역의 낮은 레벨의 추상화 (abstraction)이다. 이 영역은 영역의 내용이 스크롤되는 뷰포트라는 중앙 위젯을 제공합니다 (즉, 내용의 보이는 부분이 뷰포트에 렌더링 됨).

뷰포트 옆에는 세로 스크롤 막대가 있으며, 아래에는 가로 스크롤 막대 입니다. 모든 영역 내용이 뷰포트에 맞으면 스크롤 막대의 Qt :: ScrollBarPolicy 에 따라 각 스크롤 막대가 표시되거나 숨길 수 있습니다. 스크롤 막대가 숨겨지면 뷰포트가 확장되어 사용 가능한 모든 공간을 포함합니다. 스크롤 막대가 다시 표시되면 스크롤 막대에 대해 방을 만들기 위해 뷰포트가 축소됩니다.

QAbstractScrollArea 자체는 뷰포트의 소유권을 갖고 있으므로 완벽하게 문제가 없으므로 신경 쓸 필요가 없습니다. QAbstractScrolArea + Viewport을 하나의 요소로 생각할 수 있습니다. 하나의 요소 (물론 복합 요소)로 작동 할 수 있으며 하나의 요소로 삭제 될 수 있습니다. 항목의 소유권을 갖게된다는 것은 그것의 주인과 함께 파괴되어야한다.

+0

클라이언트가 뷰포트에 위젯을 추가 할 수 있지만 GUI에는 눈에 띄는 효과가 없으므로 이러한 효과는 바람직하지 않습니다. –

+1

@TobiasLangner, 글쎄, 이런 식으로 생각 해봐. 스크롤 영역은 내부에 _something_ 및 스크롤 막대 두 개가있는 사각형입니다. 그것은 당신 안에 무엇을 넣느냐에 달려 있습니다. 그것은 그림, 테이블, 3D 렌더링 또는 다른 것일 수 있습니다. 그런데'QTextEdit'가'QAbstractScrollArea'에서 파생 된 이유는'QScrollArea'가 아닌'QAbstractScrollArea'에서 파생 된 이유는 픽셀 단위가 아닌 행 단위로 텍스트를 스크롤하고'QScrollArea'를 픽셀 단위로 스크롤하기 때문입니다. 대부분의 경우,'QScrollArea'는 자신의 클래스를 파생 할 필요없이 여러분의 필요에 맞게 충분할 것입니다. – SingerOfTheFall

+0

괜찮 으면 QTextEdit를 자세히 살펴볼 것입니다. 왜냐하면 저는 줄 단위로 스크롤해야하기 때문입니다. 고마워. –