#include "bargraphics.h" #include #include #include #include BarGraphics::BarGraphics(QWidget *parent) : QWidget(parent) { m_rankSet = new QBarSet("排名",this); m_amountSet = new QBarSet("交易额",this); m_barSeries = new QBarSeries(this); m_chart = new QChart(); m_barAxis = new QBarCategoryAxis(this); m_chartView = new QChartView(this); m_hLayout = new QHBoxLayout(this); // 放到水平布局中 m_chart->setTitle("灵动策略1"); } BarGraphics::BarGraphics(QVector &rank, QVector &amount, QStringList &timeAxis, QString name, QWidget *parent): QWidget(parent) { m_rankSet = new QBarSet("排名",this); m_amountSet = new QBarSet("交易额",this); m_barSeries = new QBarSeries(this); m_chart = new QChart(); m_barAxis = new QBarCategoryAxis(this); m_chartView = new QChartView(this); m_hLayout = new QHBoxLayout(this); // 放到水平布局中 m_chart->setTitle(name); m_chart->setAnimationOptions(QChart::SeriesAnimations); for(int i=0;iappend(rank[i]); m_amountSet->append(amount[i]); } //m_barSeries->clear(); m_barSeries->append(m_rankSet); m_barSeries->append(m_amountSet); m_chart->addSeries(m_barSeries); // 区分一下 添加一次和多次的区别 m_barAxis->append(timeAxis); m_chart->createDefaultAxes(); m_chart->setAxisX(m_barAxis,m_barSeries); m_chartView->setChart(m_chart); m_hLayout->addWidget(m_chartView); qDebug()<<"222添加数据完成"<count(); m_chart->installEventFilter(this); } void BarGraphics::addBarData(QVector &rank, QVector &amount,QStringList &timeAxis) { for(int i=0;iappend(rank[i]); m_amountSet->append(amount[i]); } //m_barSeries->clear(); m_barSeries->append(m_rankSet); m_barSeries->append(m_amountSet); m_chart->addSeries(m_barSeries); // 区分一下 添加一次和多次的区别 m_barAxis->append(timeAxis); m_chart->createDefaultAxes(); m_chart->setAxisX(m_barAxis,m_barSeries); m_chartView->setChart(m_chart); m_hLayout->addWidget(m_chartView); qDebug()<<"添加数据完成"<count(); } bool BarGraphics::eventFilter(QObject *watched, QEvent *event) { if (event->type() == QEvent::GraphicsSceneMouseMove) { QGraphicsSceneMouseEvent *mouseEvent = static_cast(event); qDebug()<<"GraphicsSceneMouseMove in"; // 确保不是拖拽操作且鼠标在图表区域内 if (mouseEvent->buttons() == Qt::NoButton) { QPointF scenePos = mouseEvent->scenePos(); QRectF plotArea = qobject_cast(watched)->plotArea(); qDebug()<<"GraphicsSceneMouseMove in1111"; if (plotArea.contains(scenePos)) { QBarSeries *series = watched->findChild(); qDebug()<<"GraphicsSceneMouseMove in2222"; if (series) { QList sets = series->barSets(); for (QBarSet *set : sets) { // 计算鼠标所在的柱子索引 qreal categorySize = plotArea.width() / series->count(); int categoryIndex = qFloor((scenePos.x() - plotArea.x()) / categorySize); if (categoryIndex >= 0 && categoryIndex < set->count()) { qreal value = set->at(categoryIndex); QToolTip::showText( mouseEvent->screenPos(), QString("值: %1").arg(value), qobject_cast(watched) ); qDebug()<<"GraphicsSceneMouseMove in3333"; return true; } } } } } } else if (event->type() == QEvent::Leave) { // 更可靠的鼠标离开事件处理 QToolTip::hideText(); return true; } else if (event->type() == QEvent::ToolTip) { // 阻止默认工具提示行为 return true; } return QWidget::eventFilter(watched,event); }