调用Qpainter的方法paint刷新图像并改变颜色

Posted

技术标签:

【中文标题】调用Qpainter的方法paint刷新图像并改变颜色【英文标题】:Calling Qpainter's method paint to refresh image and change color 【发布时间】:2015-04-01 14:51:21 【问题描述】:

我创建了一个对象调用Player,它继承自QGraphicsObject

当我用鼠标单击它时,我要做的是更改播放器的图像和边界形状的颜色。问题是我不知道要向player->paint() 发送什么值来更新图像。

我重写两个纯虚函数如下

在 player.h 中:

class Player : public QGraphicsObject

public:
    Player();
    QRectF boundingRect() const;
    QPainterPath shape() const;
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,QWidget *widget);

    void mousePressEvent(QGraphicsSceneMouseEvent *event);

在 player.cpp 中

Player::Player()

    QPixmap m_playerPixmap(":/images/images/chevalier/test1.png");


QRectF Player::boundingRect() const

    return QRectF(-15, 0, 128, 130);


QPainterPath Player::shape() const

    QPainterPath path;
    path.addEllipse(-15, 70, 100, 60);
    return path;


void Player::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,QWidget *widget)


    QPen linepen;

    linepen.setWidth(5);
    linepen.setColor(Qt::red);

    painter->setPen(linepen);

    painter->drawPath(shape());

    painter->drawPixmap(0, 0, m_playerPixmap);


void Player::mousePressEvent(QGraphicsSceneMouseEvent *event)

    this->paint();

非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

您必须致电update()

这将标记要更新的项目,并发出一个绘制事件,然后使用正确的参数调用paint

【讨论】:

以上是关于调用Qpainter的方法paint刷新图像并改变颜色的主要内容,如果未能解决你的问题,请参考以下文章

未调用 QGraphicsItem 绘制

C#图片闪烁

未调用 Paint 方法

Java JPanel中,repaint(),paint(),方法的区别?

QT的Paint 系统

Qt基础之二十六:Qt绘图系统(Paint System)