drawText ()를 qpicture의 경계를 업데이트 할 수있는 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/792521

  •  16-09-2019
  •  | 
  •  

문제

a QPicture 경계가 업데이트해야합니다. 이와 같이:

>>> picture = QPicture()
>>> painter = QPainter(picture)
>>> picture.boundingRect()
QRect(0,0,0,0)
>>> painter.drawRect(20,20,50,50)
>>> picture.boundingRect()
QRect(20,20,50,50)

그러나 텍스트를 그려면 경계 낙타가 업데이트되지 않습니다.

>>> picture = QPicture()
>>> painter = QPainter(picture)
>>> picture.boundingRect()
QRect(0,0,0,0)
>>> painter.drawText(10,10, "Hello, World!")
>>> picture.boundingRect()
QRect(0,0,0,0)

분명히, 그것은 경계를 업데이트하지 않습니다.

그려진 텍스트를 반복하게하는 방법이 있습니까? 아니면 수동으로해야합니까? (너무 어렵지는 않지만 QT가 여기서 나를 도울 수 있기를 바랍니다.)

도움이 되었습니까?

해결책

텍스트 매개 변수 다음에 경계 사각형을 지정 해야하는 이러한 오버로드 방법을 살펴보십시오 (첫 번째 인수 위치의 사각형과는 다른).

지정된 플래그에 따라 제공된 사각형에 주어진 텍스트를 그립니다. BoundingRect (NULL이 아닌 경우)는 전체 텍스트를 동봉하기 위해 경계 사각형이 무엇인지로 설정됩니다.

qpainter.DrawText (1), qpainter.DrawText (2)

업데이트:

DrawText () 메소드에 대한 경계 사각형을 미리 생성하려는 경우 QPainter에서 BondingRect () 메소드를 호출합니다.

현재 설정된 font ()를 사용하여 지정된 플래그로 주어진 사각형 내부에 그릴 때 나타날 때 텍스트의 경계 사각형을 반환합니다. 즉, 함수는 동일한 인수가 주어지면 drawText () 함수가 그려 질 위치를 알려줍니다.

지정된 플래그를 사용하여 텍스트가 주어진 사각형에 맞지 않으면 함수는 필요한 사각형을 반환합니다.

qpainter.boundingRect

QRECTF 출력과 경계를 연결했지만 정보는 다른 버전에도 적용됩니다.

따라서 기본적으로 qpainter.boundingRect ()의 결과를 qPainter.DrawText () 메소드의 BondingRect 매개 변수로 전달하십시오 (두 번째 QRECT 인수).

Update 2:

너무 조밀 한 것에 대해 매우 사과드립니다. 나는 DrawText가 QT와 PYQT에서 다르게 작동한다는 것을 잊었습니다. 경계 사각형은 DrawText 함수 (QT와 같이 전달되지 않음)에 의해 반환되며 또한 경계 사각형을 받기 전에 정렬 플래그를 지정해야합니다. (Aaron Digulla의 의견에 따라 P.end ()도 포함) :

pic = Qt.QPicture()
p = QtGui.QPainter(pic)
brect = p.drawText(10,10,200,200, QtCore.Qt.AlignCenter, "blah")
p.end()
print brect
print pic.boundingRect()

출력은 다음과 같습니다.

pyqt4.qtcore.qrect (100, 103, 20, 14)

pyqt4.qtcore.qrect (0, 0, 0, 0)

따라서 깃발을 전달할 때 DrawText () 메소드의 출력에 의해 최소한 경계 사각형을 직접 설정 해야하는 것 같습니다.

이것은 이상적인 행동처럼 보이지 않으며, 경계 사각형을 직접 설정해야합니다. 다른 사람이 찾고있는 답변이 있기를 바랍니다. 그러나이 버그를보고하고 싶을 것 같습니다.

다른 팁

그림은 QT에서 무언가의 크기를 바꾸지 않습니다. 주된 이유는 다음과 같습니다.

  • 구성 요소는 스스로 페인트해야합니다
  • 페인트는 크기 조정을 유발합니다
  • 크기 크기는 그림을 트리거합니다 -> 끝없는 루프

따라서 크기는 레이아웃 단계에서 발생해야합니다. 그 후에는 한계가 바뀌지 않아야합니다.

문제를 해결하려면 QFONTMETRIC을 사용하여 텍스트가 사진 구성 중 또는 가깝게 텍스트가 얼마나 큰지 파악한 다음 그에 따라 크기를 조정하십시오.

편집] hm ... 경계를 요청하기 전에 end ()를 호출하십시오. 그것이 효과가 있다면, 당신은 버그를 찾았다 (요소를 추가 할 때 경계가 존재하지 않는 이유를 볼 수 없다 ...)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top