gpt4 book ai didi

c++ - QPainter 不改变颜色

转载 作者:太空宇宙 更新时间:2023-11-04 12:08:16 26 4
gpt4 key购买 nike

我正在学习 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 可能做错了什么,所以我将它们注释掉,最终重新 -什么都不画。

谢谢。

最佳答案

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

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() 的调用中删除该区域,则会重新绘制整个小部件并且您的颜色更改将正常工作。

关于c++ - QPainter 不改变颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11025404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com