QtChart 放大显示

QtChart 放大显示,使用 QtChart 做数据展示,数据量大情况下不便查看,双击后在新控件重新绘制数据,类似放大。若想使用 widget 形式的放大,QChartView showFullScreen()或用 QWidget 自定义一层即可。

    if (event->type() == QEvent::MouseButtonDblClick)
    {
        if (mVlcWidgetVideoLst.at(num)->isFullScreen())
        {
            mVlcWidgetVideoLst.at(num)->setWindowFlags(Qt::SubWindow);
            mVlcWidgetVideoLst.at(num)->showNormal();
        }
        else
        {
            mVlcWidgetVideoLst.at(num)->setWindowFlags(Qt::Window);
            mVlcWidgetVideoLst.at(num)->showFullScreen();
        }

        return true;
    }

eventFilter拦截双击事件

    mDailyLimitCountView->installEventFilter(this);
    

    if (event->type() == QEvent::MouseButtonDblClick)
    {
        if (watched == mDailyLimitCountView)
        {
            zoomInDailyChartView(0);
            return true;
        }
    }

添加新chart控件,LineSeries数量选择最大

    mDailyZoomInChart = new QChart;
    mDailyZoomInView = new QChartView(mDailyZoomInChart);
    mDailyZoomInSeries = new QLineSeries;
    mDailyZoomInSeries2 = new QLineSeries;
    mDailyZoomInSeries3 = new QLineSeries;

    mDailyZoomInChart->setTitleFont(this->font());
    mDailyZoomInChart->setMargins(QMargins(0, 0, 0, 0));
    mDailyZoomInChart->setAnimationOptions(QChart::SeriesAnimations);

    mDailyZoomInView->setRenderHint(QPainter::Antialiasing);
    mDailyZoomInView->setBackgroundRole(QPalette::Light);

    mDailyZoomInChart->legend()->setFont(this->font());
    mDailyZoomInChart->legend()->setVisible(true);
    mDailyZoomInChart->legend()->setAlignment(Qt::AlignBottom);

正常流程展示数据后,使用成员变量把数据保存下来

    QVector<QPointF> mPointsLimitUpCount;
    QVector<QPointF> mPointsLimitDownCount;

响应函数首先清空series和axis,然后重新设置series和axis,更新数据。

void MainWindow::zoomInDailyChartView(int index)
{
    for (int i = 0; i < mLineSeriesLstZoomIn.size(); ++i)
    {
        mDailyZoomInChart->removeSeries(mLineSeriesLstZoomIn.at(i));
    }

    for (int i = 0; i < mLineAxisLstZoomIn.size(); ++i)
    {
        QValueAxis *axis = mLineAxisLstZoomIn.at(i);
        mDailyZoomInChart->removeAxis(axis);
        delete axis;
    }

    mLineSeriesLstZoomIn.clear();
    mLineAxisLstZoomIn.clear();
    QStringList lineSeriesNameLst;

    if (index == 0)
    {
        mLineSeriesLstZoomIn << mDailyZoomInSeries << mDailyZoomInSeries2;
        lineSeriesNameLst << QStringLiteral("涨停家数") << QStringLiteral("跌停家数");

        for (int i = 0; i < mLineSeriesLstZoomIn.size(); ++i)
        {
            mLineSeriesLstZoomIn.at(i)->setName(lineSeriesNameLst.at(i));
            mDailyZoomInChart->addSeries(mLineSeriesLstZoomIn.at(i));
        }

        mDailyZoomInSeries->replace(mPointsLimitUpCount);
        mDailyZoomInSeries2->replace(mPointsLimitDownCount);

        QValueAxis *axisXLimitCount = new QValueAxis;
        axisXLimitCount->setRange(1, mPointsLimitUpCount.size());
        axisXLimitCount->setLabelFormat("%d");
        axisXLimitCount->setLabelsFont(this->font());
        axisXLimitCount->setVisible(false);

        QList<int> tmpLst;
        QList<int> limitUpCountLst;
        QList<int> limitDownCountLst;

        foreach (QPointF point, mPointsLimitUpCount)
        {
            limitUpCountLst.append(point.y());
        }

        qSort(limitUpCountLst.begin(), limitUpCountLst.end());

        foreach (QPointF point, mPointsLimitDownCount)
        {
            limitDownCountLst.append(point.y());
        }

        qSort(limitDownCountLst.begin(), limitDownCountLst.end());

        tmpLst << limitUpCountLst.first() << limitUpCountLst.last() << limitDownCountLst.first() << limitDownCountLst.last();

        qSort(tmpLst.begin(), tmpLst.end());

        QValueAxis *axisYLimitCount = new QValueAxis;
        axisYLimitCount->setRange(tmpLst.first(), tmpLst.last());
        axisYLimitCount->setLabelFormat("%d");
        axisYLimitCount->setLabelsFont(this->font());

        mDailyZoomInChart->setAxisX(axisXLimitCount, mDailyZoomInSeries);
        mDailyZoomInChart->setAxisX(axisXLimitCount, mDailyZoomInSeries2);

        mDailyZoomInChart->setAxisY(axisYLimitCount, mDailyZoomInSeries);
        mDailyZoomInChart->setAxisY(axisYLimitCount, mDailyZoomInSeries2);

        mLineAxisLstZoomIn.append(axisXLimitCount);
        mLineAxisLstZoomIn.append(axisYLimitCount);

        mDailyZoomInChart->setTitle(QStringLiteral("涨跌停家数"));
    }
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值