【发布时间】: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();
}
由于我第一次怀疑Qpainter 的save 和restore 可能做错了什么,所以我将它们注释掉,最终没有重新绘制。
谢谢。
【问题讨论】:
-
画出来的大炮是什么颜色的?
-
你的代码是做什么的?这与它应该做的有什么不同?例如,它是否输出
in PaintCannon blue(或yellow)但随后使用不同的颜色,还是什么? -
@Jeremy Friesner 大炮保持蓝色,这是最初绘制的颜色。
-
@Gareth McCaughan 如果您查看我所指的代码,可能会清楚这段代码的作用;我的意图是,在正常状态下,大炮是蓝色的。只有在空中射击时,大炮才会变成黄色。
-
那个 tut 已经过时了,我去查一下more recent。