【问题标题】:How can I change the color of a QGraphicsItem object?如何更改 QGraphicsItem 对象的颜色?
【发布时间】:2020-05-27 04:37:41
【问题描述】:

我尝试使用 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(对于我所做的没有区别),但仍然没有成功。

【问题讨论】:

标签: c++ qt qgraphicsitem


【解决方案1】:

我无法复制它。它工作正常。您可能正在更改一些在屏幕上不可见的矩形。由于其他地方的错误,您可能在同一位置有多个重叠的矩形,即使发生更改,您也看不到。 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 不是罪魁祸首。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多