2016-11-14 2 views
0

QBrush.setTexture()을 사용하여 QGraphicsRectItem을 .png 배경으로 업데이트하려고합니다. 하지만 정확한 크기를 QGraphicsRectItem에 맞게 설정할 수 없습니다. QPixMap.QGraphicsRectItem에서 QPixmap으로 QBrush.setTexture()를 호출하는 방법?

brush->setTexture((QPixmap(":/images/h_shutdown.png")) 
.scaled(70,30,Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); 

그러나 .png는 항상 중앙에서 교차하도록 쌓여 있습니다.

의견이 있으십니까?

QGrahpicsRectItem with backround png

답변

0

난 당신이 사각형의 좌표와 충분한 이미지 크기와 주위에 바이올린을 경우, 당신은 결국이 작업을 얻을 수 있음을 상상하지만, 항상 타일 텍스처를 시도 할 것입니다. 직사각형의 모양이 변형되거나 사용자와의 상호 작용이 있다면 직사각형이 효과를 내기 위해 더 많은 시간과 노력이 필요할 것입니다.

브러시를 사용하려고하면 버리는 것이 좋습니다. 대신, QGraphicsRectItem을 서브 클래스 화하고 PNG 이미지를 직접 페인트하십시오. 이미지 (drawImage) 및 직사각형 (drawRect)을 그리는 QPainter 명령은 사용하기가 쉽고 완전한 제어권을가집니다. PNG를 그린 후에 파생 클래스의 paint 메소드 내에서 QGraphicsRectItem :: paint를 호출하는 것을 잊지 마십시오. 그렇지 않으면 사각형이 사라집니다.

또한 QGraphicsPixmapItem을 하위 클래스로 만들 수도 있습니다. 그것은 PNG 파일을 그리는 책임이 있으며, 그 다음 직사각형을 페인트해야합니다.

또는 QGraphicsItem을 하위 클래스로 만들고 모든 그림을 직접 만들 수도 있습니다. 매우 쉽습니다. Qt 경험 초기에 QGraphicsItem의 서브 클래 싱을 피하고 그림 호출을 파고 드는 것을 원치 않았기 때문에 모든 것에 내장 된 도형을 사용하는 것에 집중했습니다. 실제로 실수 였고 내장 된 것들을 내가 필요한 모든 것을하도록 강요하려고하지 않고 내 자신의 그래픽 아이템 클래스를 만들었다면 피할 수 없었던 많은 불필요한 복잡성을 도입했습니다. QPainter 호출은 매우 쉽고 완벽합니다. 대신 그 대신 탐색을 권장합니다.

QGraphicsRectItem 또는 QGraphicsPixmapItem 대신 서브 클래스로 QGraphicsItem을 사용하면 그림을 훨씬 잘 제어 할 수 있으므로 궁극적 인 솔루션으로 권장 할 수있는 루틴입니다. 그러나 더 작은 단계를 변경하려면 QGraphicsRectItem을 서브 클래 싱하여 실험을 시작한 다음 QGraphicsItem을 서브 클래 싱하는 것으로 이동하십시오. 어느 것이 가장 적합한지는 귀하의 정확한 요구에 달려 있습니다.