感觉用下来和qwt差不多,没什么难度
但是群里大佬都发话了,吐槽qchart不行,虽然还是不肯定,还是尽量用qcustomplot
记一个今天遇到的问题 曲线用QLineSeries 不要用QSplineSeries,QSplineSeries加载得超级慢!!!!!!
//开始
-------------------------------------------------------------------------------------------------------------------------------------------------
三个东西组成
QChartView类 QChart类 线段 QLineSeries类
QLineSeries->QChart->QChartView里 ->指放入
//直接复制一段函数,直接可以设置样式和显示曲线了
pressure_chart->addSeries(pressure_line_series);
pressure_chart->addSeries(mark_line_series);
pressure_chart->createDefaultAxes(); // 基于已添加到图表的 series 来创建默认的坐标轴
qchart_view->setChart(pressure_chart);
qchart_view->setRubberBand(QChartView::NoRubberBand);
qchart_view->setRenderHint(QPainter::Antialiasing);//抗锯齿渲染
qchart_view->chart()->setTheme(QChart::ChartThemeBlueCerulean);
pressure_line_series->setUseOpenGL(true);//openGl 加速
pressure_line_series->setVisible(true);
mark_line_series->setUseOpenGL(true);//openGl 加速
mark_line_series->setVisible(true);
axisX = new QValueAxis(this);
axisX->setRange(0, Axis_X_Maxsize);
axisX->setLabelFormat("%d");
axisX->setTickCount(9);//设置大刻度
axisX->setMinorTickCount(0); //设置小刻度线的数目(两个大刻度之间的小刻度数目)
//axisX->setTitleText("axisX");
QValueAxis *axisY = new QValueAxis;
axisY->setRange(Axis_Y_Minsize, Axis_Y_Maxsize);
axisY->setLabelFormat("%.1f");
//axisY->setTitleText("axisY");
pressure_chart->setAxisX(axisX, pressure_line_series);
pressure_chart->setAxisY(axisY, pressure_line_series);
pressure_chart->setAxisX(axisX, mark_line_series);
pressure_chart->setAxisY(axisY, mark_line_series);
pressure_chart->legend()->hide();
//m_chart->createDefaultAxes();
//曲线颜色
pressure_line_series->setPen(QPen(QColor(199, 199, 0), 1, Qt::SolidLine));//设置画笔
mark_line_series->setPen(QPen(QColor(255, 255, 255),2, Qt::SolidLine));
//画布颜色
//pressure_chart->setBackgroundBrush(QColor(64, 70, 76));
//坐标轴字体以及颜色
axisX->setLabelsColor(QColor(255, 255, 255));
axisY->setLabelsColor(QColor(255, 255, 255));
QFont font_x = axisX->labelsFont();
QFont font_y = axisY->labelsFont();
font_x.setFamily(QString::fromLocal8Bit("微软雅黑"));
font_y.setFamily(QString::fromLocal8Bit("微软雅黑"));
font_x.setPixelSize(12);
font_y.setPixelSize(12);
axisX->setLabelsFont(font_x);
axisY->setLabelsFont(font_y);
-----------------------------------------------------------------------------------------
说个问题,点击QChart想获取坐标轴x值 找了很久没找到
然后通过鼠标事件 得到鼠标在QChartView上的坐标
再用QChart的这个函数直接可以得到坐标轴!!!!
QPointF point_new=pressure_chart->mapToValue(point);
//补充 或者当前坐标轴的最大最小值
ui.qchart_view->chart()->axisX())->min();
//之后能用qchart尽量用qchart吧 尽量替代qwt (现在又用qcustomplot代替qchart了。。哈哈)
//填充区域
QAreaSeries area_series = new QAreaSeries(line_series, nullptr); //第一个参数为上线 第二个是线 没有默认x轴
具体要看我的控件库
还是万能的一句话 将准备好的 都准备好
位置问题 100%正确
2020.7.14 今天窗口设置小了 chart显示不全 直接设置下布局就好了
qchart->setMargins(QMargins(0, 0, 0, 0); qchart->layout()->setContentsMargins(0,0,0,0); qchart->layout()->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); qchart->layout()->setMinimumHeight(1); qchart->layout()->setMinimumWidth(1);