Qt创建一个QTcharts界面

创建一个简单的QtCharts

首先在.pro文件加入以下代码

QT       += charts

.pro文件代码

QT       += core gui
QT       += charts
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++17

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    widget.cpp

HEADERS += \
    widget.h

FORMS += \
    widget.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

.h文件代码

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>


QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void creatChart();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

.cpp代码

#include "widget.h"
#include "ui_widget.h"
#include <QtCharts>
using namespace QtCharts;

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    creatChart();
}

Widget::~Widget()
{
    delete ui;
}

void Widget::creatChart()
{
    QChartView *chartView = new QChartView(this); //创建ChartView
    chartView->resize(600,600); //设置chartView图像大小
    QChart *chart = new QChart(); //创建Chart
    chart -> setTitle("简单函数曲线");   //设置标题
    chartView->setChart(chart);  //Chart添加到ChartView
    //创建折现序列
    QLineSeries *series0 = new QLineSeries();
    QLineSeries *series1 = new QLineSeries();
    series0->setName("Sin曲线");
    series1->setName("Cos曲线");
    chart->addSeries(series0);
    chart->addSeries(series1);
    //序列添加数值
    qreal t=0,y1,y2,intv=0.1;
    int cnt=100;
    for(int i =0;i<cnt;i++)
    {
        y1=qSin(t); //+qrand();
        series0->append(t,y1);
        y2=qSin(t+20);
        series1->append(t,y2);
        t+=intv;
    }
    //创建坐标轴
    QValueAxis *axisX = new QValueAxis;  //x轴
    axisX->setRange(0,10);    //设置坐标轴范围
    axisX->setTitleText("time(secs)");

    QValueAxis *axisY = new QValueAxis;  //Y轴
    axisY->setRange(-2,2);
    axisY->setTitleText("value");

    chart ->setAxisX(axisX,series0);  //为序列设置X坐标轴
    chart ->setAxisX(axisX,series1);  //为序列设置X坐标轴
    chart ->setAxisY(axisY,series0);  //为序列设置Y坐标轴
    chart ->setAxisY(axisY,series1);  //为序列设置Y坐标轴


}


实现效果
在这里插入图片描述

创建一个折线

QT       += core gui
QT       += charts

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++17

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    mainwindow.h

FORMS += \
    mainwindow.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target


#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtCharts>
using namespace QtCharts;

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT
private:
    QLineSeries *curSeries;  //当前序列
    QValueAxis *curAxis;     //当前坐标轴
    void createChart();     //创建图表
    void prepareData();     //更新数据
    

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_act_exit_triggered();

    void on_Btn_SetTitle_clicked();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H


#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTime>
#include <QDebug>


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    createChart();  //创建图表
    prepareData();   //生成数据

}
void MainWindow::createChart()
{
    QChart *chart = new QChart();
    chart->setTitle("简单函数曲线");
    ui->chartView->setChart(chart);
    ui->chartView->setRenderHint(QPainter::Antialiasing);

    QLineSeries *series0 = new QLineSeries();
    QLineSeries *series1 = new QLineSeries();
    series0->setName("sin曲线");
    series1->setName("cos曲线");
    curSeries=series0; //当前序列
    QPen pen;
    pen.setStyle(Qt::DotLine);
    pen.setWidth(2);
    pen.setColor(Qt::red);
    series0->setPen(pen);  //折线序列的线条设置
    pen.setStyle(Qt::SolidLine);
    pen.setColor(Qt::blue);
    series1->setPen(pen); //折线序列的线条设置
    chart->addSeries(series0);
    chart->addSeries(series1);

    QValueAxis *axisX = new QValueAxis;
    curAxis =axisX; //当前坐标轴
    axisX->setRange(0,10);  //设置坐标轴范围
    axisX->setLabelFormat("%.1f"); //标签格式
    axisX->setTickCount(11);  //主分隔个数
    axisX->setMinorTickCount(4);
    axisX->setTitleText("time(secs"); //标题
    QValueAxis *axisY = new QValueAxis;
    axisY->setRange(-2,2);
    axisY->setTitleText("value");
    axisY->setTickCount(5);
    axisY->setLabelFormat("%.2f");
    axisY->setMinorTickCount(4);
    chart->setAxisX(axisX,series0);
    chart->setAxisX(axisX,series1);
    chart->setAxisY(axisY,series0);
    chart->setAxisY(axisY,series1);


}

void MainWindow::prepareData()
{
    QLineSeries *series0=(QLineSeries *)ui->chartView->chart()->series().at(0);
    QLineSeries *series1=(QLineSeries *)ui->chartView->chart()->series().at(1);
    series0->clear();
    series1->clear();
    qsrand(QTime::currentTime().second());  //随机数初始化
    qreal t=0,y1,y2,intv=0.1;
    qreal rd;
    int cnt=100;
    for(int i=0;i<cnt;i++)
    {
        rd=(qrand()%10)-5;  //随机数 -5~+5
        y1=qSin(t)+rd/50;
        series0->append(t,y1);
        rd=(qrand()%10)-5;  //随机数-5~+5
        y2=qCos(t)+rd/50;
        series1->append(t,y2);  //序列添加数据点
        t+=intv;
    }
}


MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_act_exit_triggered()
{
    this->close();
}

ui界面放置一个Graphics View 右击提升,并且将ogjectName改为chartview
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值