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("涨跌停家数"));
}
}