Qt c++ 图形选中高亮 选中其他图形后恢复 其他图形高亮
时间: 2023-10-08 18:13:24 浏览: 106
你可以通过重写 Qt 中 QGraphicsItem 的 mousePressEvent() 和 mouseReleaseEvent() 函数来实现图形的选中和高亮。
在 mousePressEvent() 中,你可以判断当前鼠标点击位置是否在图形内,如果是,则将该图形设置为选中状态,并设置该图形的边框颜色为高亮色。同时,你还需要记录下当前选中的图形,以便在选中其他图形时,可以将上一个选中的图形恢复为正常状态。
在 mouseReleaseEvent() 中,你可以判断当前鼠标释放位置是否在其他图形内,如果是,则将其他图形的边框颜色设置为高亮色。同时,你需要将之前选中的图形恢复为正常状态。
下面是一个简单的示例代码:
```c++
void MyGraphicsItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
if (contains(event->pos())) {
setFlag(QGraphicsItem::ItemIsSelectable, true);
setPen(QPen(Qt::red));
m_selectedItem = this; // 记录当前选中的图形
}
QGraphicsItem::mousePressEvent(event);
}
void MyGraphicsItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
QGraphicsItem::mouseReleaseEvent(event);
if (m_selectedItem != this && contains(event->pos())) {
m_selectedItem->setPen(QPen(Qt::black)); // 恢复之前选中的图形
setPen(QPen(Qt::red));
m_selectedItem = this; // 记录当前选中的图形
}
else {
setPen(QPen(Qt::black));
m_selectedItem = nullptr;
}
}
```
在上面的示例中,m_selectedItem 是一个指向选中图形的指针。注意,在 mouseReleaseEvent() 中,如果当前释放位置不在其他图形内,需要将 m_selectedItem 设置为 nullptr,以便在下一次选中时,可以正确地记录选中的图形。
阅读全文