如何更改 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/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
不是罪魁祸首。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 如何将矢量对象更改为不同的颜色?
- 如何更改 QGraphicsItem 对象的颜色?
- 照明具有不同颜色和强度的对象
- 使用带有纹理的.x文件网格会覆盖其他对象的颜色
- 顶点缓冲对象的颜色- DirectX vs OpenGL
- Opencv背景减法获取颜色对象
- 根据颜色查找图像中的所有对象
- 每当我按下c++键时,我如何在1个对象上应用照明颜色
- OpenGL,将透明纹理与对象颜色混合
- 如何在项目符号中设置碰撞对象的颜色
- 仅使用顶点着色器对象的GLSL会丢失颜色/纹理