qt c++重写继承QGraphicsView选中一个图形项并改变颜色
时间: 2023-05-17 10:05:16 浏览: 166
可以通过重写 QGraphicsItem::mousePressEvent() 和 QGraphicsItem::paint() 函数来实现选中图形项并改变颜色的功能。具体实现可以参考以下代码:
// 自定义图形项类
class MyGraphicsItem : public QGraphicsItem
{
public:
MyGraphicsItem(QGraphicsItem *parent = nullptr) : QGraphicsItem(parent) {}
QRectF boundingRect() const override { return QRectF(-20, -20, 40, 40); }
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
{
Q_UNUSED(option);
Q_UNUSED(widget);
// 绘制矩形
painter->setBrush(m_color);
painter->drawRect(boundingRect());
}
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event) override
{
// 点击时改变颜色
m_color = Qt::red;
update();
QGraphicsItem::mousePressEvent(event);
}
private:
QColor m_color = Qt::blue;
};
// 自定义场景类
class MyGraphicsScene : public QGraphicsScene
{
public:
MyGraphicsScene(QObject *parent = nullptr) : QGraphicsScene(parent)
{
// 添加图形项
addItem(new MyGraphicsItem);
}
};
// 自定义视图类
class MyGraphicsView : public QGraphicsView
{
public:
MyGraphicsView(QWidget *parent = nullptr) : QGraphicsView(parent)
{
// 设置场景
setScene(new MyGraphicsScene);
}
};
// 在主函数中创建视图并显示
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyGraphicsView view;
view.show();
return a.exec();
}
当点击图形项时,会触发 mousePressEvent() 函数,将颜色改为红色并调用 update() 函数刷新界面,从而实现改变颜色的效果。
阅读全文