2023-12-14 使用Qt画一条曲线(AI辅助)


点击 <C 语言编程核心突破> 快速C语言入门



在这里插入图片描述


前言

要解决问题: 有一个函数, 生成一些点, 想画一条曲线.

想到的思路: 这个用Qchart比较简单.

其它的补充: 需要稍许配置


一、Qchart简介

QChart是Qt中的一个图表控件,用于绘制各种类型的图表。

以下是QChart的使用方法及一些常用的函数。

  1. 首先,需要在项目文件中引入QChart的头文件:
#include <QChart>
#include <QChartView>
  1. 创建一个QChart对象:
QChart *chart = new QChart();
  1. 设置图表的标题:
chart->setTitle("Chart Title");
  1. 创建一个QChartView对象,并将QChart对象设置为其图表:
QChartView *chartView = new QChartView(chart);
  1. 设置图表显示的窗口大小:
chartView->setFixedSize(800, 600);
  1. 创建一个QLineSeries对象用于绘制折线图:
QLineSeries *series = new QLineSeries();
  1. 向QLineSeries对象中添加数据点:
series->append(x1, y1);
series->append(x2, y2);
...
  1. 将QLineSeries对象添加到QChart对象中:
chart->addSeries(series);
  1. 创建一个QValueAxis对象用于设置坐标轴:
QValueAxis *axisX = new QValueAxis();
QValueAxis *axisY = new QValueAxis();
  1. 设置坐标轴的范围和标签:
axisX->setRange(minX, maxX);
axisX->setLabelFormat("%.2f");
axisY->setRange(minY, maxY);
axisY->setLabelFormat("%.2f");
  1. 将坐标轴添加到QChart对象中:
    chart->addAxis(axisX, Qt::AlignBottom);
    chart->addAxis(axisY, Qt::AlignLeft);
  1. 显示图表:
chartView->show();

这些是QChart的一些常用方法,除了绘制折线图之外,还可以使用QBarSeries绘制柱状图,QPieSeries绘制饼状图等等。

  1. 折线图:
    在这里插入图片描述
QLineSeries *series = new QLineSeries();
series->append(0, 6);
series->append(2, 4);
series->append(3, 8);
series->append(7, 4);
series->append(10, 5);

QChart *chart = new QChart();
chart->addSeries(series);
chart->createDefaultAxes();
chart->setTitle("Line Chart");

QChartView *chartView = new QChartView(chart);
chartView->show();
  1. 条形图:
    在这里插入图片描述
QBarSet *set0 = new QBarSet("Bar 1");
QBarSet *set1 = new QBarSet("Bar 2");

*set0 << 1 << 2 << 3 << 4 << 5;
*set1 << 5 << 4 << 3 << 2 << 1;

QBarSeries *series = new QBarSeries();
series->append(set0);
series->append(set1);

QChart *chart = new QChart();
chart->addSeries(series);
chart->setTitle("Bar Chart");
chart->setAnimationOptions(QChart::SeriesAnimations);

QStringList categories;
categories << "Category 1" << "Category 2" << "Category 3" << "Category 4" << "Category 5";
QBarCategoryAxis *axisX = new QBarCategoryAxis();
axisX->append(categories);
chart->createDefaultAxes();
chart->setAxisX(axisX, series);

QChartView *chartView = new QChartView(chart);
chartView->show();
  1. 饼图:
    在这里插入图片描述
QPieSeries *series = new QPieSeries();
series->append("Slice 1", 10);
series->append("Slice 2", 20);
series->append("Slice 3", 30);
series->append("Slice 4", 40);

QChart *chart = new QChart();
chart->addSeries(series);
chart->setTitle("Pie Chart");

QChartView *chartView = new QChartView(chart);
chartView->show();
  1. 散点图:
    在这里插入图片描述
QScatterSeries *series = new QScatterSeries();
for (int i = 0; i < 36; ++i)
{
    series->append(i, 18 * sin(i * M_PI / 18.0));
}

QChart *chart = new QChart();
chart->addSeries(series);
chart->createDefaultAxes();
chart->setTitle("Scatter Chart");

QChartView *chartView = new QChartView(chart);
chartView->show();

这些示例只是展示了QChart的一部分功能,实际上QChart还有很多其他的功能和配置选项可以用来绘制各种不同类型的图形。

二、代码

直接建立一个QchartView, 运行即可.

CMake.txt

cmake_minimum_required(VERSION 3.14)

project(Learn_27 LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Charts)


add_executable(Learn_27
  main.cpp
)
target_link_libraries(Learn_27 PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
target_link_libraries(Learn_27 PRIVATE Qt${QT_VERSION_MAJOR}::Charts)


install(TARGETS Learn_27
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})

main.cpp

#include <QApplication>
#include <QChart>
#include <QChartView>
#include <QLineSeries>
#include <QValueAxis>
#include <math.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    // 创建图表视图
    QChartView chartView;
    chartView.setFixedSize(800, 600);

    // 创建图表对象
    QChart chart;
    chartView.setChart(&chart);

    // 创建曲线数据
    QLineSeries series;
    double PI_180 = M_PI / 180.0;
    for (int i = 0; i < 1024; ++i)
    {
        series.append(i / 100.0, sin(i * PI_180));
    }

    // 将曲线添加到图表中
    chart.addSeries(&series);

    // 创建坐标轴
    QValueAxis axisX;
    axisX.setTitleText("X Axis");
    axisX.setLabelFormat("%.2f");
    chart.addAxis(&axisX, Qt::AlignBottom);
    series.attachAxis(&axisX);

    QValueAxis axisY;
    axisY.setTitleText("Y Axis");
    axisY.setLabelFormat("%.2f");
    chart.addAxis(&axisY, Qt::AlignLeft);
    series.attachAxis(&axisY);

    // 显示图表视图
    chartView.show();

    return a.exec();
}


总结

看起来不是那么难, 毕竟Qt都已经封装好了, 直接用就可以.


点击 <C 语言编程核心突破> 快速C语言入门


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在C++和Qt中,绘制曲线图可以使用Qt中的QCustomPlot库来实现。QCustomPlot是一个强大的绘图库,提供了丰富的绘图功能,包括曲线图、柱状图、散点图等。 要绘制曲线图,首先需要创建一个QCustomPlot对象,并将其添加到QWidget或QMainWindow上。然后,我们可以使用QCustomPlot的函数来设置图表的标题、坐标轴标签和范围等属性。 接下来,可以创建一个QCPGraph对象,用于绘制曲线。通过设置QCPGraph的数据和颜色等属性,可以完成曲线绘制。我们可以使用QCustomPlot的函数来添加和删除曲线。 在绘制曲线之前,需要准备好曲线的数据。通常,我们可以将曲线的数据存储在一个Qt容器(如QVector)中,然后将其传递给QCPGraph的setData函数。 一旦准备好曲线的数据和属性,即可调用QCustomPlot的replot函数来重新绘制曲线图。曲线图会根据传递给setData函数的数据自动更新和调整。 除了基本的曲线绘制外,QCustomPlot还提供了许多其他功能,如坐标轴刻度的设置、网格线的显示、多曲线绘制等。通过研究QCustomPlot的文档和示例代码,可以更深入地了解和使用它的功能。 总之,使用C++和Qt绘制曲线图是相对简单的。通过使用QCustomPlot库,我们可以方便地实现曲线绘制和操控。 ### 回答2: 在C++中使用Qt绘制曲线图可以通过QCustomPlot库来实现。以下是实现步骤: 1. 安装QCustomPlot库:将QCustomPlot的源代码添加到项目中,并在项目文件的.pro文件中添加库的引用。 2. 创建曲线图窗口:使用QMainWindow或QWidget派生类创建一个窗口用于显示曲线图。 3. 初始化曲线图:在窗口的构造函数中,创建一个QCustomPlot对象,并设置图表的标题、坐标轴等属性。 4. 添加数据:使用QVector保存曲线图的数据点,并将其添加到QCustomPlot对象中。 5. 绘制曲线图:使用QCustomPlot的addGraph()方法创建曲线,并将数据点设置为曲线的坐标。 6. 设置曲线样式:使用QPen类设置曲线的颜色、线型等样式。 7. 显示曲线图:使用QCustomPlot的replot()方法将曲线绘制在窗口上。 8. 添加交互功能:如果需要,可以通过QCustomPlot的信号和槽机制,实现交互功能,例如缩放、平移等。 9. 更新曲线图:如果需要在运行期间更新曲线图,可以通过重新设置数据点的方式,再次调用replot()方法进行更新。 10. 清除曲线图:如果需要清除曲线图,可以调用QCustomPlot的clearGraphs()方法清除所有曲线。 总结:使用Qt的QCustomPlot库可以方便地绘制曲线图。通过初始化、添加数据、绘制曲线、设置样式、显示曲线、添加交互功能、更新和清除曲线等步骤,可以实现自定义的曲线绘制。 ### 回答3: C++和Qt是一种常用的编程语言开发工具,可以用于绘制曲线图。Qt是一个跨平台的开发框架,具有丰富的功能和易用的API,可以轻松地绘制各种图形,包括曲线图。 要使用Qt绘制曲线图,首先需要创建一个窗口或视图来展示图形。可以使用Qt的窗口类(如QMainWindow、QWidget)或图形视图类(如QGraphicsView、QChartView)来创建一个可显示图形的界面。 然后,需要创建一个曲线图对象(如QLineSeries、QSplineSeries),并且添加数据点到曲线上。Qt提供了数据序列类来存储数据,以便绘制曲线图。可以使用append方法向序列对象中添加数据点。 接下来,需要创建一个图表对象(如QChart),将曲线图对象添加到图表中,并设置图表的样式和属性,如标题、坐标轴等。Qt提供了一系列的图表类,来帮助我们创建具有各种样式的图表。 最后,将图表对象添加到窗口或视图中,并显示出来。可以使用布局管理器(如QVBoxLayout、QGridLayout)将图表放置在窗口或视图中的合适位置,然后调用show()方法显示出来。 在绘制曲线图时,还可以根据需要自定义曲线的样式和属性,如线条颜色、线宽等。可以使用Qt的绘图API来绘制曲线,如设置笔(QPen)的颜色和宽度。 绘制曲线图是一个需要一定编程知识和经验的任务,但使用Qt可以简化这个过程,提供了丰富的功能和易用的API,使曲线图的绘制变得容易和灵活。通过学习和熟悉Qt的绘图功能,我们可以更加方便地创建出漂亮的曲线图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不停感叹的老林_<C 语言编程核心突破>

不打赏的人, 看完也学不会.

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值