如何更改 QGraphicsItem 对象的颜色?

How can I change the color of a QGraphicsItem object?

本文关键字:颜色 对象 何更改 QGraphicsItem      更新时间:2023-10-16

我尝试用QGraphicsRectItem强制转换它,然后使用setBrush(Qt::QColor(方法,但没有成功。

int r = rand() %itemList.length();
MyItem *item = itemList.at(r);
QGraphicsRectItem *rect = qgraphicsitem_cast<QGraphicsRectItem *>(item);
rect->setBrush(Qt::black);
rect->update();

我什至尝试在QGraphicsRectItem中更改MyItem(对于我正在做的事情没有区别(,但仍然没有成功。

我无法重现它。它工作正常。您可能正在更改一些在屏幕上不可见的矩形。由于其他地方的错误,您可能在同一位置有多个重叠的矩形,即使发生了更改,您也看不到更改。update()调用是不必要的:这意味着该项的实现已中断。每当更改项的可见属性时,该项都应自动更新。事实上,确实如此。如果您编写了自己的项目类型,并且它们需要手动update()调用,则需要修复它们!

这里有一个小演示,表明setBrush确实适用于QGraphicsRectItem

// https://github.com/KubaO/stackoverflown/tree/master/questions/qgraphicsitem-brush-62028912
#include <QtWidgets>
#include <cstdlib>
QColor randColor() { return QRgb((rand() << 16) ^ rand()); }
int main(int argc, char *argv[])
{
srand(QDateTime::currentDateTime().toMSecsSinceEpoch());
QApplication a(argc, argv);
QGraphicsScene scene;
QGraphicsView view(&scene);
auto *rect = scene.addRect(0, 0, 100, 100);
view.fitInView(rect);
QTimer timer;
QObject::connect(&timer, &QTimer::timeout, &view, [rect]{
rect->setBrush(randColor());
});
timer.start(500);
view.show();
return a.exec();
}

此演示将为您工作。然后你必须弄清楚你还有什么其他错误,因为setBrush不是罪魁祸首。