首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在QGraphicsRectItem上使用QPixmap调用QBrush.setTexture()?

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

Stack Overflow用户
提问于 2016-11-14 15:53:55
回答 1查看 621关注 0票数 0

我正在尝试使用QBrush.setTexture()更新具有.png背景的QGraphicsRectItem。但是我不能设置准确的大小来适应QPixMapQGraphicsRectItem

代码语言:javascript
复制
brush->setTexture((QPixmap(":/images/h_shutdown.png"))
.scaled(70,30,Qt::IgnoreAspectRatio, Qt::SmoothTransformation));

但.png总是堆积在一起,从中心交叉延伸。

你有什么意见建议?

QGrahpicsRectItem with backround png

EN

回答 1

Stack Overflow用户

发布于 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进行子类化。哪个效果最好将取决于您的确切需求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40584101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档