如何根据其内容确定 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()
- 是否可行或已经实施?
- 为什么要继承
QGraphicsTextItem
?我没有看到您正在添加 QGraphicsTextItem
. 中尚未完成的任何类型的功能
- 你的 SO 名声很好,但你问的问题像个新手。首先描述你的主要目标是什么!你试图解决这个问题的方式是次要的!
- 阅读文档。很好。
boundingRect
必须 return 包含图形项目的整个绘图内容的最小可能矩形。如果此值不正确,您可能会看到一些绘画瑕疵。它总是被执行。
- 很有可能,如果您阅读它的文档,您会发现您不必继承任何东西。
我正在尝试子类化一些 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()
- 是否可行或已经实施?
- 为什么要继承
QGraphicsTextItem
?我没有看到您正在添加QGraphicsTextItem
. 中尚未完成的任何类型的功能
- 你的 SO 名声很好,但你问的问题像个新手。首先描述你的主要目标是什么!你试图解决这个问题的方式是次要的!
- 阅读文档。很好。
boundingRect
必须 return 包含图形项目的整个绘图内容的最小可能矩形。如果此值不正确,您可能会看到一些绘画瑕疵。它总是被执行。 - 很有可能,如果您阅读它的文档,您会发现您不必继承任何东西。