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


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


使用Qt画一条曲线


前言

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

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

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


一、Qchart简介

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

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

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

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

  1. 折线图:
cpp 复制代码
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. 条形图:
cpp 复制代码
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. 饼图:
cpp 复制代码
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. 散点图:
cpp 复制代码
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

bash 复制代码
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

c 复制代码
#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语言入门


相关推荐
落落落sss20 分钟前
MybatisPlus
android·java·开发语言·spring·tomcat·rabbitmq·mybatis
简单.is.good37 分钟前
【测试】接口测试与接口自动化
开发语言·python
Yvemil71 小时前
MQ 架构设计原理与消息中间件详解(二)
开发语言·后端·ruby
程序员是干活的1 小时前
私家车开车回家过节会发生什么事情
java·开发语言·软件构建·1024程序员节
我是陈泽1 小时前
一行 Python 代码能实现什么丧心病狂的功能?圣诞树源代码
开发语言·python·程序员·编程·python教程·python学习·python教学
优雅的小武先生1 小时前
QT中的按钮控件和comboBox控件和spinBox控件无法点击的bug
开发语言·qt·bug
Death2001 小时前
使用Qt进行TCP和UDP网络编程
网络·c++·qt·tcp/ip
虽千万人 吾往矣2 小时前
golang gorm
开发语言·数据库·后端·tcp/ip·golang
创作小达人2 小时前
家政服务|基于springBoot的家政服务平台设计与实现(附项目源码+论文+数据库)
开发语言·python
郭二哈2 小时前
C++——list
开发语言·c++·list