如何根据其内容确定 QGraphicsTextItem 的 boundingRect()?

How do I determine the boundingRect() of a QGraphicsTextItem based on its contents?

我正在尝试子类化一些 QGraphicsItem 类:

对于QGraphicsTextItem我如何确定boundingRect()shape()

我正在尝试从 textWidth() 中创建一个 boundingRect 并且... ?

显然,在 paint(...) 中我还必须指定我必须绘制的矩形...我想我通过使用

简单地解决了它
QRectF TextItem::boundingRect() const
{
    qreal w = textWidth(); qreal h = 1000;  // h = ?
//    QRectF rect(QGraphicsTextItem::boundingRect());  // this leads to crash, maybe undefined ?
    QRectF rect(0,0,w,h)
    return rect;
}

void TextItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* /*option*/, QWidget* /*widget*/)
{
    setDefaultTextColor(m_color);
    setPlainText("Hello world");
    QFont f;
    f.setPointSize(200); // calculated
    f.setBold(true);
    painter->setFont(f); // which of this and the next I need...
    setFont(f);          // really seems one of this is not needed
    painter->drawText(QGraphicsTextItem::boundingRect(), Qt::AlignCenter, this->toPlainText());
}

我需要从实际文本中获取 boundingRect() - 是否可行或已经实施?

  1. 为什么要继承 QGraphicsTextItem?我没有看到您正在添加 QGraphicsTextItem.
  2. 中尚未完成的任何类型的功能
  3. 你的 SO 名声很好,但你问的问题像个新手。首先描述你的主要目标是什么!你试图解决这个问题的方式是次要的!
  4. 阅读文档。很好。 boundingRect 必须 return 包含图形项目的整个绘图内容的最小可能矩形。如果此值不正确,您可能会看到一些绘画瑕疵。它总是被执行。
  5. 很有可能,如果您阅读它的文档,您会发现您不必继承任何东西。