前言
在做项目的时候需要用折线图来体现数据的变化,于是就用到了QChart,下面是我在使用QChart时遇到的一些问题,在此记录。
准备工作
项目配置
因为我们这个项目是用cmake来构建的,所以在已经敲定用QChart的时候,首先遇到的第一个问题就是cmake如何使用QChart。
于是在我去搜的时候,发现网上大部分都是qmake使用QChart,cmake相关的很少,所以在此记录一下cmake如何添加QChart到自己的项目中去。
在CMakeLists.txt文件中添加下面两行代码即可。
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Charts) target_link_libraries(SpinalAnesthesiaPuncture PRIVATE Qt${QT_VERSION_MAJOR}::Charts)
显示窗口
注意:窗口的基类必须是QGraphicsView,并且将该窗口提升为QChartView。一开始我用的是普通的QWidget,效果死活出不来。。。
折线图
下面有一个需要注意的地方
QChart的setAxisX()方法已经被遗弃了,如果非要用效果是在的,但是qt一直会提醒你该方法已经被遗弃,我觉得那个很烦,换成attachAxis()方法,但是这个方法是QLineSeries的,别搞错喽。
// chart->setAxisX(axisX, series);
// chart->setAxisY(axisY, series);
series->attachAxis(axisX);
series->attachAxis(axisY);
// chart->setAxisX(axisX, series); // chart->setAxisY(axisY, series); series->attachAxis(axisX); series->attachAxis(axisY);
源码如下
void NavigationManageForm::creatChart()
{
chart = new QChart();
// 将图例隐藏
chart->legend()->hide();
// 创建默认的坐标系为笛卡尔坐标系
chart->createDefaultAxes();
// 设置图表标题
chart->setTitle(QStringLiteral("压力传感器数据折线图"));
//背景色显示隐藏
chart->setBackgroundVisible(false);
// 创建图表框架,QChartView是QChart的视图组件,用来显示
view = new QChartView(this);
view->setChart(chart);
view->setRenderHint(QPainter::Antialiasing);
// 创建折线图序列
series = new QLineSeries();
//添加数据绘制,可以改为动态化
series->append(0, 2);
series->append(QPointF(2, 6));
series->append(3, 8);
series->append(7, 9);
series->append(11, 3);
series->setColor(QColor(0, 163, 255));
chart->addSeries(series);
// 绘图时对线条进行设置
QPen pen;
pen.setStyle(Qt::DotLine);
QValueAxis* axisY = new QValueAxis;
axisY->setGridLinePen(pen);
//刻度线是否可见
axisY->setLineVisible(false);
//设置主网格线
axisY->setGridLineVisible(true);
axisY->setLinePenColor(QColor(44, 51, 62));
//设置x,y轴标签
axisY->setLabelsVisible(false);
axisY->setGridLineColor(QColor(44, 51, 62));
// axisY->setTickCount(2);
// 次网线格
axisY->setMinorTickCount(1);
axisY->setMinorGridLinePen(pen);
axisY->setMinorGridLineVisible(true);
axisY->setMinorGridLineColor(QColor(44, 51, 62));
//创建坐标轴
QValueAxis* axisX = new QValueAxis;
axisX->setGridLineVisible(false);
axisX->setLineVisible(false);
axisX->setLabelsVisible(false);
axisX->setMinorGridLineVisible(false);
chart->addAxis(axisX, Qt::AlignBottom); //下:Qt::AlignBottom 上:Qt::AlignTop
chart->addAxis(axisY, Qt::AlignLeft); //左:Qt::AlignLeft 右:Qt::AlignRight
// chart->setAxisX(axisX, series);
// chart->setAxisY(axisY, series);
series->attachAxis(axisX);
series->attachAxis(axisY);
//你要放到哪个窗口让它显示出来
ui->graphicsView->setChart(chart);
}
效果图