我正在尝试使用QBrush.setTexture()更新具有.png背景的QGraphicsRectItem。但是我不能设置准确的大小来适应QPixMap的QGraphicsRectItem。
brush->setTexture((QPixmap(":/images/h_shutdown.png"))
.scaled(70,30,Qt::IgnoreAspectRatio, Qt::SmoothTransformation));但.png总是堆积在一起,从中心交叉延伸。
你有什么意见建议?
发布于 2016-11-15 05:06:08
我可以想象,如果你摆弄了足够的矩形坐标和图像大小,你可能最终会让它工作,但它总是会尝试平铺纹理。如果你的矩形改变了形状,或者你有用户与之交互,它只会变得更加令人沮丧和耗时。
我建议放弃尝试使用笔刷来完成此操作。取而代之的是,创建QGraphicsRectItem子类并自己绘制PNG图像。用于绘制图像(drawImage)和矩形(drawRect)的QPainter命令非常易于使用,然后您就可以完全控制了。在绘制PNG之后,不要忘记从派生类的paint方法中调用QGraphicsRectItem::paint。否则,该矩形将消失。
你也可以继承QGraphicsPixmapItem的子类。它将负责绘制PNG文件,然后您必须绘制矩形。
或者,您可以子类化QGraphicsItem并自己完成所有的绘制,这也非常简单。在我早期的Qt经验中,我避免对QGraphicsItem进行子类化,而是专注于使用内置的形状来处理所有事情,因为我不想深入研究绘制调用。这实际上是一个错误,并引入了许多不必要的复杂性,如果我只是创建自己的图形项目类,而不是试图强制内置项目来做我需要的一切,我就可以避免这些复杂性。QPainter调用非常简单且非常完整,我强烈建议您转而研究它。
子类化QGraphicsItem而不是QGraphicsRectItem或QGraphicsPixmapItem为您提供了对绘图的更多控制,所以我建议您在最终解决方案中使用这个例程。但是,如果您希望以较小的步骤进行更改,那么可以从对QGraphicsRectItem进行子类化开始,进行试验,然后转到对QGraphicsItem进行子类化。哪个效果最好将取决于您的确切需求。
https://stackoverflow.com/questions/40584101
复制相似问题