QCustomplot是一个强大开源的绘图工具,下面简单介绍使用QCustomplot绘制曲线。
1、首先需要新建一个QWidget,并将widget提升位QCustomplot;
2、曲线初始化
/*QCustomplot初始化*/
void widgetQCustomplotInit(QCustomPlot *widget, int graphCount, QStringList nameList)
{
QList<QPen> str = { QPen(Qt::red), QPen(Qt::yellow), QPen(Qt::green) ,QPen(Qt::white), QPen(Qt::magenta) };
//设置默认追踪鼠标,否则在触发鼠标移动时,必须先点一下才有效
widget->setMouseTracking(true);
QLinearGradient plotGradient;
plotGradient.setColorAt(0, QColor(23, 40, 68));
widget->setBackground(plotGradient); // 设置背景颜色
for (int i = 0; i < graphCount; i++)
{
widget->addGraph();
widget->graph(i)->setPen(str[i]); // 第一个图的线条颜色为蓝色
widget->graph(i)->setSmooth(true);//添加平滑曲线
widget->graph(i)->setName(nameList[i]);
}
widget->legend->setIconSize(QSize(10, 10)); // 设置图例中线条的图标大小
widget->legend->setRowSpacing(0);// 设置图例中线条的间隔
widget->legend->setVisible(true);//显示图标
widget->legend->setBorderPen(Qt::NoPen);//隐藏图标边框
widget->legend->setBrush(Qt::transparent);//设置图标透明
widget->legend->setTextColor(Qt::white);//设置图例文字颜色
widget->legend->setFont(QFont("Helvetica", 8));//设置图标字体
widget->legend->setMargins(QMargins(0, 0, 0, 0));//设置图标中图形与文字到边框距离
widget->axisRect(0)->insetLayout()->setInsetAlignment(0, Qt::AlignHCenter | Qt::AlignRight);//设置图列居中
widget->axisRect(0)->setBackground(QColor(23, 40, 68));//设置背景为黑色
widget->xAxis->setTickLabelColor(Qt::white);//设置x轴文本颜色
widget->xAxis->setLabelColor(Qt::white);
widget->xAxis->setBasePen(QPen(QColor(40, 80, 150)));//设置x轴颜色
widget->xAxis->setTickPen(QPen(QColor(40, 80, 150)));
widget->xAxis->setSubTickPen(QPen(QColor(40, 80, 150)));
widget->xAxis->grid()->setVisible(false);
widget->xAxis->setSubTickLengthIn(0); // 轴线内子刻度的长度
widget->xAxis2->setVisible(true); // 显示上方的 x 轴
widget->xAxis2->setTickLabels(false);
widget->xAxis2->setTickLabelColor(Qt::white);//设置x轴文本颜色
widget->xAxis2->setLabelColor(Qt::white);
widget->xAxis2->setBasePen(QPen(QColor(40, 80, 150)));//设置x轴颜色
widget->xAxis2->setTickPen(QPen(QColor(40, 80, 150)));
widget->xAxis2->setSubTickPen(QPen(QColor(40, 80, 150)));
widget->xAxis2->grid()->setVisible(false);
widget->xAxis2->setSubTickLengthIn(0); // 轴线内子刻度的长度
widget->yAxis->setTickLabelColor(Qt::white);//设置y轴文本颜色
widget->yAxis->setBasePen(QPen(QColor(40, 80, 150)));//设置y轴颜色
widget->yAxis->setTickPen(QPen(QColor(40, 80, 150)));
widget->yAxis->setSubTickPen(QPen(QColor(40, 80, 150)));
widget->yAxis->setLabelColor(Qt::white);
widget->yAxis->grid()->setVisible(false);
widget->yAxis->rescale(); // 不设置 y 轴范围,让其自适应
widget->yAxis->setSubTickLengthIn(0); // 轴线内子刻度的长度
widget->yAxis2->setVisible(true); // 显示右方的 y 轴
widget->yAxis2->setTickLabels(false);
widget->yAxis2->setTickLabelColor(Qt::white);//设置y轴文本颜色
widget->yAxis2->setBasePen(QPen(QColor(40, 80, 150)));//设置y轴颜色
widget->yAxis2->setTickPen(QPen(QColor(40, 80, 150)));
widget->yAxis2->setSubTickPen(QPen(QColor(40, 80, 150)));
widget->yAxis2->setLabelColor(Qt::white);
widget->yAxis2->grid()->setVisible(false);
widget->yAxis2->setSubTickLengthIn(0); // 轴线内子刻度的长度
connect(widget->xAxis, SIGNAL(rangeChanged(QCPRange)), widget->xAxis2, SLOT(setRange(QCPRange)));
connect(widget->yAxis, SIGNAL(rangeChanged(QCPRange)), widget->yAxis2, SLOT(setRange(QCPRange)));
widget->replot();
}
3、对曲线进行赋值处理
/*QCustomplot赋值*/
void widgetQCustomplotSetData(QCustomPlot *widget, QStringList nameList, QVector<double> vec_value, QMap<QString, QVector<double>> dataX, QMap<QString, QVector<double>> dataY)
{
/*绘制曲线*/
for (int i = 0; i < nameList.size(); i++)
{
if (dataX.contains(nameList[i]) && dataY.contains(nameList[i]))
{
widget->graph(i)->setData(dataX[nameList[i]], dataY[nameList[i]]);
}
}
widget->yAxis->rescale(); // 不设置 y 轴范围,让其自适应
// 最后,重绘图表
widget->replot();
}
4、效果图如下

注:如果本文章对您有所帮助,请点赞收藏支持一下,谢谢。^_^
版权声明:本文为博主原创文章,转载请附上博文链接。

3306

被折叠的 条评论
为什么被折叠?



