QT 图表的使用()

通过QChart绘制折线图

ui:

在这里插入图片描述

主窗口类定义和初始化
构造函数
class MainWindow : public QMainWindow
{
    Q_OBJECT

private:
    QChart      *chart;        //当前的图表
    QLineSeries *curSeries;    //当前序列
    QValueAxis  *curAxis;      //当前坐标轴

    void    createChart();      //创建图表
    void    prepareData();      //更新数据
    void    updateFromChart();  //从图表更新到界面

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

private:
    Ui::MainWindow *ui;
};

MainWindow 类中定义了 3 个函数,其中函数 createChart()用于创建图表,在构造函数里被调用;函数 prepareData()用于更新序列的数据;函数 updateFromChart()用于读取图表的一些属性,并刷新界面显示内容。

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) 
{ 
 ui->setupUi(this); 
 createChart(); //创建图表
 prepareData(); //为序列生成数据
 updateFromChart(); //从图表获取属性值,刷新界面显示内容
 this->setCentralWidget(ui->splitter); 
}
createChart()
void MainWindow::createChart() 
{//创建图表
 chart = new QChart(); 
 chart->setTitle(tr("简单函数曲线")); 
 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); //序列 series0 的线条设置
 pen.setStyle(Qt::SolidLine);
 pen.setColor(Qt::blue); 
 series1->setPen(pen); //序列 series1 的线条设置
 chart->addSeries(series0); //将序列添加到图表中
 chart->addSeries(series1); 
 QValueAxis *axisX = new QValueAxis; 
 curAxis=axisX; //当前坐标轴
 axisX->setRange(0, 10); 
 axisX->setLabelFormat("%.1f"); //标签格式
 axisX->setTickCount(11); //主刻度个数
 axisX->setMinorTickCount(2); //次刻度个数
 axisX->setTitleText("time(secs)"); //轴标题
 QValueAxis *axisY = new QValueAxis; 
 axisY->setRange(-2, 2); 
 axisY->setLabelFormat("%.2f"); //标签格式
 axisY->setTickCount(5); 
 axisY->setMinorTickCount(2); 
 axisY->setTitleText("value"); 
 //为 chart 和序列设置坐标轴
 chart->addAxis(axisX,Qt::AlignBottom); //将坐标轴添加到图表中,并指定方向
 chart->addAxis(axisY,Qt::AlignLeft); 
 series0->attachAxis(axisX); //序列 series0,附加坐标轴
 series0->attachAxis(axisY); 
 series1->attachAxis(axisX); //序列 series1,附加坐标轴
 series1->attachAxis(axisY); 
}
prepareData()
void MainWindow::prepareData() 
{//为序列生成数据
     QLineSeries *series0= static_cast<QLineSeries *>(chart->series().at(0)); 
     QLineSeries *series1= static_cast<QLineSeries *>(chart->series().at(1)); 
     series0->clear(); //清除数据
     series1->clear(); 
     qreal t=0, y1, y2, intv=0.1; 
     int cnt= 100; 
     for(int i=0; i<cnt; i++) 
     { 
         int rd= QRandomGenerator::global()->bounded(-5,6); //随机整数,[-5,5] 
         y1= qSin(t)+rd/50.0; 
         series0->append(t,y1); //序列添加数据点
         rd= QRandomGenerator::global()->bounded(-5,6); //随机整数,[-5,5] 
         y2= qCos(t)+rd/50.0; 
         series1->append(t,y2); //序列添加数据点
         t += intv; 
	 } 
}
updateFromChart()
void MainWindow::updateFromChart() 
{ 
 QChart *curChart= ui->chartView->chart(); //获取视图组件关联的 chart 
 ui->editTitle->setText(curChart->title()); //图表标题
 QMargins mg= curChart->margins(); //图表的边距
 ui->spinMarginLeft->setValue(mg.left()); 
 ui->spinMarginRight->setValue(mg.right());
 ui->spinMarginTop->setValue(mg.top()); 
 ui->spinMarginBottom->setValue(mg.bottom()); 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值