一、效果:

二、思路添加item实现
scene中添加item
m_pHorizontalLine = new QGraphicsLineItem();m_pHorizontalLine->setVisible(false);m_pHorizontalLine->setZValue(2);chart()->scene()->addItem(m_pHorizontalLine);m_pVerticalLine = new QGraphicsLineItem();m_pVerticalLine->setVisible(false);m_pVerticalLine->setZValue(2);chart()->scene()->addItem(m_pVerticalLine);m_pTips = new QGraphicsTextItem();m_pTips->setVisible(false);m_pTips->setZValue(2);chart()->scene()->addItem(m_pTips);
三、移动逻辑
void CCommonChartView::mouseMoveEvent(QMouseEvent* pEvent)
{if (m_bMouseCorssAble){QPointF pos = pEvent->pos();m_pHorizontalLine->setLine(0, pos.y(), viewport()->width(), pos.y());m_pVerticalLine->setLine(pos.x(), 0, pos.x(), viewport()->height());m_pTips->setPos(pos.x(), pos.y());m_pTips->setPlainText(QString(TransString2Unicode(" 坐标: [%1, %2]")).arg(pos.x()).arg(pos.y()));update();}QChartView::mouseMoveEvent(pEvent);
}
四、完整代码
#include "../Include/CommonChartView.h"
#include "../Include/Conversion.h"CCommonChartView::CCommonChartView(QWidget* parent): QChartView(parent)
{InitChartView();
}CCommonChartView::CCommonChartView(QChart* chart, QWidget* parent): QChartView(chart, parent)
{InitChartView();
}CCommonChartView::~CCommonChartView()
{}void CCommonChartView::InitChartView()
{m_bMouseCorssAble = false;m_pHorizontalLine = nullptr;m_pVerticalLine = nullptr;m_pTips = nullptr;
}void CCommonChartView::SetMouseCorssAble(bool bEnable)
{m_bMouseCorssAble = bEnable;
}void CCommonChartView::InitCorssItem()
{m_pHorizontalLine = new QGraphicsLineItem();m_pHorizontalLine->setVisible(false);m_pHorizontalLine->setZValue(2);chart()->scene()->addItem(m_pHorizontalLine);m_pVerticalLine = new QGraphicsLineItem();m_pVerticalLine->setVisible(false);m_pVerticalLine->setZValue(2);chart()->scene()->addItem(m_pVerticalLine);m_pTips = new QGraphicsTextItem();m_pTips->setVisible(false);m_pTips->setZValue(2);chart()->scene()->addItem(m_pTips);
}void CCommonChartView::mouseMoveEvent(QMouseEvent* pEvent)
{if (m_bMouseCorssAble){QPointF pos = pEvent->pos();m_pHorizontalLine->setLine(0, pos.y(), viewport()->width(), pos.y());m_pVerticalLine->setLine(pos.x(), 0, pos.x(), viewport()->height());m_pTips->setPos(pos.x(), pos.y());m_pTips->setPlainText(QString(TransString2Unicode(" 坐标: [%1, %2]")).arg(pos.x()).arg(pos.y()));update();}QChartView::mouseMoveEvent(pEvent);
}void CCommonChartView::enterEvent(QEvent* pEvent)
{if (m_bMouseCorssAble){m_pHorizontalLine->setVisible(true);m_pVerticalLine->setVisible(true);m_pTips->setVisible(true);}QChartView::enterEvent(pEvent);
}void CCommonChartView::leaveEvent(QEvent* pEvent)
{if (m_bMouseCorssAble){m_pHorizontalLine->setVisible(false);m_pVerticalLine->setVisible(false);m_pTips->setVisible(false);}QChartView::leaveEvent(pEvent);
}