Я не могу это воспроизвести. Работает нормально. Возможно, вы меняете какой-то прямоугольник, который не отображается на экране. Вероятно, у вас есть несколько перекрывающихся прямоугольников в одной и той же позиции из-за ошибок в другом месте, и вы не видите изменений, даже если они происходят. Вызов 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
не является виновником.