2014-04-06 2 views
1

Qt 4.8에서 프로젝트를 수행했으며 QDeclarativeItem을 사용하고 QPainter의 drawEllipse 메소드를 사용하여 원을 그립니다.Qt 5 QPainter를 사용하지 않고 QQuickItem에서 타원을 그립니다.

이제 Qt5에서, 나는 정말로 그것을 할 방법을 찾지 못하는 것 같습니다. qt4에서 qt5까지의 포팅 가이드에서 그들은 QSG * 클래스를 사용한다고 말합니다. 그러나 그것들 중 하나를 사용하여 타원을 그리는 방법을 찾을 수는 없습니다. 두 사람이 보니 : QSGSimpleRectNodeQSGGeometry,하지만 아무것도 없습니다 ...

어떤 생각이 있으십니까? 감사!

답변

1

QSG * 클래스를 사용하는 것이 맞습니다. 기본적으로 QPainter API보다 더 까다로울 것입니다. OpenGL을 중심으로 얕은 래퍼이고 OpenGL은 원, 커브 등을 네이티브로 처리하지 않기 때문입니다.

커스텀 QML 항목을 사용하는 방법 QQuickItem의 하위 클래스 화를 수행 한 다음 updatePaintNode 함수를 사용자 지정 드로잉으로 재정 의하여 C++로 구현됩니다.

실제로 모든 OpenGL 버퍼를 직접 관리 할 필요는 없지만 그려야 할 점 (및 색상 등)을 지정하여 OpenGL "서버"(GPU)로 데이터를 보내야합니다. 커브의 경우 OpenGL의 커브는 일반적으로 많은 짧은 선이나 일련의 점으로 표현되므로 상당히 노동 집약적입니다. Here is on example.And here is another.

채워진 타원이나 원이 대신 많은 삼각형으로 표시됩니다.

내가 원하는 범위를 모르지만, OpenGL에서 외부에서 만들어진 원 이미지 (스프라이트)를 사용하고 OpenGL에서 위치, 크기, 크기 등을 조작하는 것이 훨씬 쉽습니다. 일반적으로 QtQuick에서이 작업을 수행 할 수도 있지만 일반적으로 이미지 조작이 아닌 사용자 정의 도면 용 updatePaintNode을 사용하는 것과 다릅니다.

+0

답변 해 주셔서 감사합니다. 나는 현재 QQuickPaintedItems를 사용하여 뭔가 효과가있다. 일단 내가 몇 가지 프로그레시브를 가지고 있다면, 나는이 isue로 되돌아 올 것이고 아마 sprites로 당신의 접근을 사용할 것입니다. (잘하면 svg 이미지로 스케일링 할 때 나는보기 흉한 결과를 얻지 못할 것입니다.) 감사합니다. – ddeunagomez