【问题标题】:QPainter doesn't change colorQPainter 不会改变颜色
【发布时间】:2012-06-14 00:56:47
【问题描述】:

我正在学习Qt。我没有意识到the exercise of chapter 11 of Qt tutorial,它指出“在空中射击时改变大炮的颜色”。我选择在paintCannon 函数中实现更改(如下)。我下面的代码有什么问题?

void CannonField::paintCannon(QPainter &painter)
{
    painter.setPen(Qt::NoPen);
    if (autoShootTimer->isActive()){

        std::cout << "in paintCannon yellow; "  << std::endl; 
        // This gets called everytime `paintEvent` occurs. 
        // Please see the code in the web page (http://doc.trolltech.com/4.3/tutorial-t11-cannonfield-cpp.html) for this part.

        painter.setBrush(Qt::yellow);
    }else{
        std::cout << "in paintCannon blue; "  << std::endl;
        painter.setBrush(Qt::blue);
    }

    painter.save();
    painter.translate(0, height());
    painter.drawPie(QRect(-35, -35, 70, 70), 0, 90 * 16);
    painter.rotate(-currentAngle);
    painter.drawRect(barrelRect);
    painter.restore();
}

由于我第一次怀疑Qpaintersaverestore 可能做错了什么,所以我将它们注释掉,最终没有重新绘制。

谢谢。

【问题讨论】:

  • 画出来的大炮是什么颜色的?
  • 你的代码是做什么的?这与它应该做的有什么不同?例如,它是否输出 in PaintCannon blue(或 yellow)但随后使用不同的颜色,还是什么?
  • @Jeremy Friesner 大炮保持蓝色,这是最初绘制的颜色。
  • @Gareth McCaughan 如果您查看我所指的代码,可能会清楚这段代码的作用;我的意图是,在正常状态下,大炮是蓝色的。只有在空中射击时,大炮才会变成黄色。
  • 那个 tut 已经过时了,我去查一下more recent

标签: c++ qt qpainter


【解决方案1】:

你遇到的问题是在这个例程中:

void CannonField::moveShot()
{
    QRegion region = shotRect();
    ++timerCount;

    QRect shotR = shotRect();

    if (shotR.x() > width() || shotR.y() > height())
    {
        autoShootTimer->stop();
    } 
    else
    {
        region = region.unite(shotR);
    }
    update(region);
}

当镜头移动时,update() 将被调用并指定一个区域。这导致仅重新绘制镜头矩形。如果您从对 update() 的调用中删除该区域,则整个小部件将重新绘制,并且您的颜色更改将正常工作。

【讨论】:

    猜你喜欢
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2021-11-10
    • 1970-01-01
    • 2019-11-06
    相关资源
    最近更新 更多