QGraphicsItem选中改变颜色
时间: 2023-05-17 12:04:21 浏览: 109
您可以通过重写 QGraphicsItem 的 paint() 函数来实现选中时改变颜色的效果。在 paint() 函数中,可以根据 item 是否被选中来设置不同的画刷和画笔,从而改变其颜色。具体实现可以参考 Qt 官方文档中 QGraphicsItem 的相关章节。
相关问题
QGraphicsItem选中并改变颜色
可以通过重写QGraphicsItem的mousePressEvent和mouseReleaseEvent方法来实现选中并改变颜色的效果。具体实现可以参考以下代码:
void MyGraphicsItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
setBrush(QBrush(Qt::red)); // 设置选中时的颜色
QGraphicsItem::mousePressEvent(event);
}
void MyGraphicsItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
setBrush(QBrush(Qt::blue)); // 设置释放时的颜色
QGraphicsItem::mouseReleaseEvent(event);
}
其中,MyGraphicsItem是继承自QGraphicsItem的自定义图形项。在mousePressEvent方法中,我们设置选中时的颜色为红色;在mouseReleaseEvent方法中,我们设置释放时的颜色为蓝色。这样,当用户点击该图形项时,它的颜色就会变为红色;当用户释放鼠标时,它的颜色就会变为蓝色。
qt c++重写继承QGraphicsView QGraphicsItem选中并改变颜色
可以通过重写QGraphicsItem的paint()函数来改变选中时的颜色,具体实现可以参考以下代码:
```
class MyGraphicsItem : public QGraphicsItem
{
public:
MyGraphicsItem(QGraphicsItem *parent = nullptr) : QGraphicsItem(parent) {}
QRectF boundingRect() const override
{
return QRectF(0, 0, 100, 100);
}
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
{
if (option->state & QStyle::State_Selected)
{
painter->setPen(Qt::red);
painter->setBrush(Qt::red);
}
else
{
painter->setPen(Qt::black);
painter->setBrush(Qt::white);
}
painter->drawRect(boundingRect());
}
};
class MyGraphicsView : public QGraphicsView
{
public:
MyGraphicsView(QWidget *parent = nullptr) : QGraphicsView(parent)
{
setScene(new QGraphicsScene(this));
MyGraphicsItem *item = new MyGraphicsItem;
scene()->addItem(item);
}
protected:
void mousePressEvent(QMouseEvent *event) override
{
QGraphicsView::mousePressEvent(event);
QGraphicsItem *item = scene()->itemAt(mapToScene(event->pos()), transform());
if (item)
{
item->setSelected(true);
}
}
};
```
这里重写了MyGraphicsItem的paint()函数,在选中时将颜色设置为红色,未选中时设置为白色。在MyGraphicsView中重写了mousePressEvent()函数,当鼠标点击时获取当前位置的item并设置为选中状态。
阅读全文