2011-08-23 4 views
1

위젯에서 속성 애니메이션을 수행 할 때 문제가 발생했지만 애니메이션 위치가 다음 레이아웃 패스에서 덮어 쓰여진 것처럼 보입니다. 위젯은 애니메이션의 시작 부분에서 바로 위치를 차지하는 것처럼 보일 것입니다. 결과적으로 나는 내 자신의 레이아웃 코드를 작성하면 더 많은 것을 제어 할 수 있을지도 모른다고 생각했습니다.QT에서 맞춤 레이아웃을 작성하는 가장 쉬운 방법은 무엇입니까?

QT에서 맞춤 레이아웃을 작성하는 가장 쉬운 방법은 무엇입니까? 설명서의 "수동 레이아웃"섹션에있는 단계를 시도했다 : http://doc.qt.nokia.com/latest/layout.html#manual-layout 그러나 자식 위젯에 setGeometry 호출 할 때 충돌을 때리는 것 같다. 또한 문서는 resizeEvent 내에서 setGeometry를 호출하는 "Manual Layout"과 충돌하는 것처럼 보이고 resizeEvent doc은이를 수행하지 않는다고 말합니다.

실제 레이아웃 클래스를 작성할 수 있다고 가정합니다. 너무 많은 코드처럼 보이지 않습니다. 그러나 사용자 정의 레이아웃을 얻는 가장 쉽고 간단한 방법은 무엇인지 궁금합니다.

+0

레이아웃으로 애니메이션을 작성해야한다고 생각하지 않습니다. 일반적으로 장면 뒤에서 많은 자동 작업을 수행하므로 제대로 제어 할 수 없습니다. 대부분의 경우, 객체의 위치와 치수를 직접 애니메이션으로 만들면 문제가 줄어 듭니다. –

+0

그건 제가 시도한 것과 같습니다. 나는 정상적으로 화면 상단에 위치하는 위젯을 가지고있다. 화면의 상단에서 그 위치로 애니메이션을 적용하여 슬라이드로 정렬합니다. 문제는 애니메이션이 시작될 때 위젯이 끝 위치 (레이아웃이 일반적으로 배치하는 위치)에서 잠시 깜박이고 슬라이드 다운 애니메이션이 실행된다는 것입니다. 나는 QT와 애니메이션에 관해서는 초보자 다. 그래서 나는 뭔가를 놓친다. 비록 내가 "슬라이드"속성을 사용하여 세로 배치 된 자체 레이아웃을 작성한 다음 해당 세로 막대를 움직이면 작동 할 수도 있습니다. – Skeets

답변

0

나는 이것이 효과가있을 것이라고 생각한다.

  1. 위젯 A로 시작하는 것은 상위 위젯 외부에서 시작됩니다. 이 아니라면 위젯을 레이아웃에 추가하십시오. A의 기하학은 모서리를 부모와 잘 공유 할 수 있습니다.

  2. A의 sizeHint()를 전달하지만 그 밖의 것은 수행하지 않는 더미 위젯 D를 만듭니다. 그것을 레이아웃에 넣으십시오. 위젯의 형상 향해

  3. 애니메이션 위젯 A를 D.

  4. 스왑 레이아웃 위젯 (위젯 A를 추가 위젯 D 제거).

위젯 A와 D가 자신이 만든 것이라면 PIMPL 관용구를 사용해야합니다. 위젯에 자식 위젯이 없으면 위젯을 스와핑하는 것이 간단합니다 - 포인터를 바꿔 쓰십시오. 위젯 자체를 바꿀 필요가 없습니다. 어쨌든 QWidgetPrivate에서 PIMPL 클래스를 파생시키지 말고 지원하지는 말고 코드를 사용했습니다. 별로 좋은 생각이 아닙니다.

관련 문제