[英]How to get PyQt QGraphicsTextItem opaque area
self.boundingRect()
給我圖像中顯示的虛線尺寸。 我需要獲取不透明區域(繪制實際文本的位置)我嘗試獲取
self.opaqueArea()
但它返回 QPainterPath 對象,它看起來很復雜,顯然沒有寬度或高度函數等作為復雜路徑對象的表示。 問:有沒有更簡單的方法來計算。 任何想法.. 提前致謝
print ("TEXT BOUNDING RECT:",self.boundingRect())
print ("TEXT OPAQUE AREA :",self.document().size())
print ("TEXT OPAQUE AREA BR size :",self.opaqueArea().boundingRect().size())
輸出:
TEXT BOUNDING RECT: PyQt5.QtCore.QRectF(0.0, 0.0, 590.0, 56.0)
TEXT OPAQUE AREA : PyQt5.QtCore.QSizeF(590.0, 56.0)
TEXT OPAQUE AREA BR size : PyQt5.QtCore.QSizeF()
QGraphicsTextItem
內部使用QTextDocument
來管理文本。 您可以通過.document()
訪問它。 文本文檔有一個size 屬性,它返回一個QPointF
。
self.document().size()
不幸的是,本文檔的所有方法都返回邊界框的標准矩形。 但是,可以使文本框根據其包含的文本大小重新調整自身。 它並沒有完全降低到像素級別(由於行高填充),但它很接近。
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.view = QGraphicsView()
scene = QGraphicsScene()
t = QGraphicsTextItem("Sample\n Text")
font = t.font()
font.setPointSize(40)
font.setWeight(600)
t.setFont(font)
t.setTextWidth(400)
scene.addItem(t)
rect = t.boundingRect()
r = QGraphicsRectItem(rect)
r.setPen(QColor('red'))
scene.addItem(r)
d = t.document()
d.setDocumentMargin(0)
d.adjustSize()
rect = t.boundingRect()
r = QGraphicsRectItem(rect)
r.setPen(QColor('blue'))
scene.addItem(r)
self.view.setScene(scene)
self.setCentralWidget(self.view)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MainWindow()
w.show()
app.exec_()
以上將給出以下結果 -
我唯一的另一個想法是從文本文檔中獲取QPainterPath
並計算該QRect
,但它似乎不容易訪問。 一種替代方法是將其繪制到QPainter
並在那里進行裁剪——但 Qt 中沒有內置的裁剪功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.