如何更改 QGraphicsItem 对象的颜色?
How can I change the color of a QGraphicsItem object?
我尝试使用 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/Whosebugn/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
不是罪魁祸首。
我尝试使用 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/Whosebugn/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
不是罪魁祸首。