如何在QGraphicsRectItem上使用QPixmap调用QBrush.setTexture()?

时间:2016-11-14 07:53:55

标签: qt qpainter

我正在尝试使用QBrush.setTexture()以.png背景更新QGraphicsRectItem。但我无法设置确切的大小以使QGraphicsRectItem符合QPixMap

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

但.png总是从中心交叉延伸。

你有什么建议吗?

QGrahpicsRectItem with backround png

1 个答案:

答案 0 :(得分:0)

我会想象如果你摆弄矩形坐标和图像尺寸足够,你最终可能会使这个工作,但它总是试图平铺纹理。如果你的矩形改变形状,或者你有用户与它进行交互,那么它就会让它变得更加令人沮丧和耗时。

我建议放弃尝试使用画笔。相反,子类QGraphicsRectItem并自己绘制PNG图像。用于绘制图像(drawImage)和矩形(drawRect)的QPainter命令非常易于使用,然后您可以完全控制。在绘制PNG之后,不要忘记在派生类的绘制方法中调用QGraphicsRectItem :: paint。否则,矩形将消失。

您也可以将QGraphicsPixmapItem子类化。它将负责绘制PNG文件,然后您必须绘制矩形。

或者,您可以将QGraphicsItem子类化并自己完成所有绘画,这也很容易。在我的Qt经验的早期,我避免了继承QGraphicsItem,并专注于使用内置的形状,因为我不想深入了解绘画调用。这实际上是一个错误,并且引入了许多不必要的复杂性,如果我只是创建自己的图形项而不是试图强制内置的那些我需要的东西,我会避免这种复杂性。 QPainter电话非常简单而且非常完整,我强烈建议您去探索。

对QGraphicsItem进行子类化而不是QGraphicsRectItem或QGraphicsPixmapItem可以让您更好地控制绘图,这是我为您的最终解决方案推荐的例程。但是,如果您想以较小的步骤进行更改,那么首先继承QGraphicsRectItem,对其进行实验,然后转移到子类化QGraphicsItem。哪种方法效果最好取决于您的确切需求。