Qt使用QCustomplot绘制曲线图

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、效果图如下

注:如果本文章对您有所帮助,请点赞收藏支持一下,谢谢。^_^

版权声明:本文为博主原创文章,转载请附上博文链接。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值