前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++曲线图折线图QT窗体绘图excel数据导入

C++曲线图折线图QT窗体绘图excel数据导入

原创
作者头像
用户9804507
发布2022-06-06 14:01:45
1.1K0
发布2022-06-06 14:01:45
举报
文章被收录于专栏:c++QT

C++曲线图折线图Qt窗体绘图excel数据导入

曲线图可自由切换在相同布局窗口中,Excel数据导入生成曲线图,根据需要可修改为直方图,饼图,散点图等。

运行结果如下:

​编辑

Qt Charts基于Qt的Graphics View架构,其核心组件是QChartView 和 QChart

QChartView是显示图标的视图,基类为QGraphicsView QChart的基类是QGraphicsltem 类的继承关系:

创建项目:.pro文件中添加:QT += charts

步骤:

第一步:安S,QT

第二步:新建项目

第三步:导入代码文件

第四步:运行

主要代码:

代码语言:javascript
复制
#include <QtCharts>
#include <iostream>
#include <qDebug>
#include <math.h>
using namespace std;

#include "MainWindow.h"

//
#include <QtCharts/QLineSeries>
#include <QtCharts/QSplineSeries>
#include <QPainter>



MainWindow::MainWindow(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);


	//QObject::connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(drawDisplay()));

    connect(ui.pushButton, &QPushButton::clicked, this, [=]()
        {
            /// 添加以下代码
            //QLineSeries* series = new QLineSeries();
            series->setPoints(true); // 设置数据点可见
            *series 
                << QPointF(11, 1)
                << QPointF(13, 3)
                << QPointF(17, 6)
                << QPointF(18, 3)
                << QPointF(20, 2);


            chart->legend()->hide();
            chart->addSeries(series);
            chart->createDefaultAxes();
            chart->setTitle("Simple line chart example");

            ui.graphicsView->setRenderHint(QPainter::Antialiasing);

        });


}


void QtChartZoomView::mouseMoveEvent(QMouseEvent *pEvent)
{
	if (m_bMiddleButtonPressed)
	{
		QPoint oDeltaPos = pEvent->pos() - m_oPrePos;
		this->chart()->scroll(-oDeltaPos.x(), oDeltaPos.y());
		m_oPrePos = pEvent->pos();
	}
	__super::mouseMoveEvent(pEvent);
}
void QtChartZoomView::mousePressEvent(QMouseEvent *pEvent)
{
	if (pEvent->button() == Qt::MiddleButton)
	{
		m_bMiddleButtonPressed = true;
		m_oPrePos = pEvent->pos();
		this->setCursor(Qt::OpenHandCursor);
	}
	__super::mousePressEvent(pEvent);
}
void QtChartZoomView::mouseReleaseEvent(QMouseEvent *pEvent)
{
	if (pEvent->button() == Qt::MiddleButton)
	{
		m_bMiddleButtonPressed = false;
		this->setCursor(Qt::ArrowCursor);
	}
	__super::mouseReleaseEvent(pEvent);
}
void QtChartZoomView::wheelEvent(QWheelEvent *pEvent)
{
	qreal rVal = std::pow(0.999, pEvent->delta()); // 设置比例
	// 1. 读取视图基本信息
	QRectF oPlotAreaRect = this->chart()->plotArea();
	QPointF oCenterPoint = oPlotAreaRect.center();
	// 2. 水平调整
	oPlotAreaRect.setWidth(oPlotAreaRect.width() * rVal);
	// 3. 竖直调整
	oPlotAreaRect.setHeight(oPlotAreaRect.height() * rVal);
	// 4.1 计算视点,视点不变,围绕中心缩放
	//QPointF oNewCenterPoint();
	// 4.2 计算视点,让鼠标点击的位置移动到窗口中心
	//QPointF oNewCenterPoint(pEvent->pos());
	// 4.3 计算视点,让鼠标点击的位置尽量保持不动(等比换算,存在一点误差)
	QPointF oNewCenterPoint(2 * oCenterPoint - pEvent->pos() - (oCenterPoint - pEvent->pos()) / rVal);
	// 5. 设置视点
	oPlotAreaRect.moveCenter();
	// 6. 提交缩放调整
	this->chart()->zoomIn(oPlotAreaRect);
	__super::wheelEvent(pEvent);
}

运行结果如下:

​编辑

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档