qt在图形QGraphicsItem画10X10的长和宽都为50的矩形,右键弹出菜单,并知道是哪个矩形单击的右键
时间: 2024-03-10 18:45:54 浏览: 21
您可以创建一个继承自QGraphicsItem的类,重写它的鼠标事件函数,以便捕获右键单击事件。在菜单中,您可以添加一个属性,以便在单击右键时知道哪个矩形被单击。以下是一个简单的示例代码:
```
class MyRectItem : public QGraphicsItem
{
public:
MyRectItem(qreal x, qreal y, qreal width, qreal height)
: m_rect(x, y, width, height)
{
setAcceptHoverEvents(true);
}
QRectF boundingRect() const override
{
return m_rect;
}
void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override
{
painter->drawRect(m_rect);
}
void hoverEnterEvent(QGraphicsSceneHoverEvent* event) override
{
setCursor(Qt::PointingHandCursor);
}
void hoverLeaveEvent(QGraphicsSceneHoverEvent* event) override
{
setCursor(Qt::ArrowCursor);
}
void mousePressEvent(QGraphicsSceneMouseEvent* event) override
{
if (event->button() == Qt::RightButton)
{
QMenu menu;
QAction* action = menu.addAction("Do something");
QAction* selectedItem = menu.exec(event->screenPos());
if (selectedItem == action)
{
// do something
}
}
else
{
QGraphicsItem::mousePressEvent(event);
}
}
private:
QRectF m_rect;
};
```
请注意,在这个示例中,我们使用了QMenu类来创建右键菜单,并添加了一个操作。您可以根据需要添加更多的操作。在鼠标事件处理程序中,我们检查事件的按钮是否是右键,并在矩形上单击右键时显示菜单。在菜单操作中,您可以执行任何您想要的操作。如果您需要在其他地方跟踪矩形,您可以添加一个属性来保存矩形的信息。