如果我理解正确,您想绘制水平线和垂直线,在光标位置交叉,并且与视口一样大。
问题是,场景不知道鼠标的位置。这意味着视图必须跟踪它并在鼠标位置发生变化时通知场景。
要做到这一点,您必须创建自己的GraphicsScene(继承QGraphicsScene)和您自己的GraphicsView(继承QGraphicsView)。
在您的GraphicsView构造函数中,您必须开始鼠标跟踪。这将使您会收到一个mouseMoveEvent每个视图内的鼠标移动时间:
GraphicsViewTrack::GraphicsViewTrack(QWidget* parent) : QGraphicsView(parent) {
setMouseTracking(true);
}
void GraphicsViewTrack::mouseMoveEvent(QMouseEvent* pEvent) {
QPointF MousePos = this->mapToScene(pEvent->pos());
emit mousePosChanged(MousePos.toPoint());
}
正如可以在上面的代码段看到,该视图发射的信号(mousePosChanged)的场景将被连接到。该信号包含鼠标位置,转换为场景的坐标。现在
,在场边,你必须添加一个当鼠标位置变更后,将被称为插槽,存储在一个成员变量的新鼠标位置并重新实现QGraphicsScene::drawForeground():
void GraphicsSceneCross::drawForeground(QPainter* painter, const QRectF&