Qt中的Qt Charts

Qt中的Qt Charts,第1张

Qt Charts用来创建各种数据图表/曲线,如下图所示。

Qt Charts的核心是 QChartView(显示图表)和QChart(管理数据)。

QChart类用于管理各种数据序列(series),以及图表相关的对象,如图例(legend)和坐标轴(axis)

QChart类用来 管理 图表的数据序列(series)、图例(legends)和坐标轴(axes)。

QChart继承自QGraphicsWidget类,可以在QGraphicsScene中显示。QChart管理图表的不同类型的图形表示,包括序列,标题和坐标轴。显示QChat最简单的方式是使用QChatView。

此外,还可以用QPolarChart(它继承自QChart)来表示折线图(line),曲线图(spline),饼状图(area)和散点图(Scatter)。

QChartView是一个能够显示图表的widget。

其中最重要的一个函数是:

void QChartView::setChart( QChart *chart)

该函数把QChartView的当前图表设为chart,新chart的所有权归QChartView所有。前一个chart(如果有)和QChartView的关系解除,必须delete前一个chart以防止内存泄露。

void QXYSeries::replace( QList <QPointF >points)

void QXYSeries::replace( QVector <QPointF >points)

以上两个函数的速度最快,要比逐点 replace 或 clear + append 新数据要快得多。replace或append是实现动态绘图的基础。

而 QVecto r的速度通常比 QList 更快,前者是内存连续的。

void setName(const QString &name):设置序列的名字,该名字显示在序列的 legend 上,支持HTML格式。

坐标轴的基类是QAbstractAxis,轴上的数据时real/double型的。

Legend用来给图标添加图例。Legend不能被创建或删除,但可以隐藏。它可以放在图标的上、下、左、右,默认在上面。

Legend上显示的名字是对应Series的名字,用 QAbstractSeries::setName(QString&name)设置。

Qt官方文档:QChart类;

Qt官方文档:Qt Charts Overview

QTCharts入门 使用QChartView做折线图

[cpp] view plaincopyprint?

/************************************************* 

  折线图绘制 

  author 周翔 

  2012-8-14 

 

  对外提供接口 

 

   void showData(int data)接受外部的折线数据 

   void setSingleUnitX(const int &value)设置x轴的单位像素 

   void startUpdataTimer(int msecond)定时器更新折线图 

   void stopUpdataTimer()关闭定时器 

 

  *************************************************/  

  

#ifndef LINEGRAPHWIDGET_H  

#define LINEGRAPHWIDGET_H  

  

#include <QWidget>  

#include <QPen>  

#include <QPainter>  

#include <QResizeEvent>  

//#include <QDebug>  

#include <QTimer>  

  

struct point  

{  

    int x  

    int y  

}  

  

class LineGraphWidget : public QWidget  

{  

    Q_OBJECT  

public:  

    //mix和max为折线的y轴的数据范围  

    explicit LineGraphWidget(int min, int max, QWidget *parent = 0)  

    void setSingleUnitX(const int &value) {singleUnitX = value}//设置x轴的一个单位占多少个像素,默认10  

    //支持定时器定时更新  

    void startUpdataTimer(int msecond)  

    void stopUpdataTimer()  

signals:  

    //支持实时更新  

    void newDataCome()//有新数据到来时发出的折线图更新信号  

public slots:  

    /** 

     * @brief showData 

     * @param adress 地址 

     * @param _data 数据 

     */  

    void showData(const QString& adress,int _data)//接受来之外部的数据  

    /** 

     * @brief slt_showData 接受外部数据 

     * @param name 设备名 

     * @param _data 数据 

     */  

    void slt_showData(ushort name,int _data)  

protected:  

    void paintEvent(QPaintEvent *)  

    void resizeEvent(QResizeEvent *e)  

private:  

    QString  m_currentNodeAdress//当前显示的节点的地址  

    ushort m_currentNodeName//当前节点的设备名  

  

    QList<int> xList  

    QList<int> yList  

    int Counter  

  

  

  

    //窗口的长和宽  

    int widgetX  

    int widgetY  

    //折线图的显示范围  

    int rangeMin  

    int rangeMax  

    //根据窗口和范围得出的单位长,x轴,y轴  

    int singleUnitX  

    int singleUnitY  

  

    //根据窗口得出的多少个单位,x轴,y轴  

    int sumUnitX  

    int sumUnitY  

  

    point basePoint//折线图的原点  

  

    point xAxisEndPoint//X轴的终点  

  

    point yAxisEndPoint//Y轴的终点  

  

    QTimer *timer  

  

    void getSumUnitX()  

    void getSingleUnitY()  

  

    void initGraph()  

  

    void flush()//数据传入的节点不是现在的当前的节点的时候,刷新画面,清除所有的值  

  

  

}

在QT的widget中用tableview显示sqlite数据库表中的内容。

假设有数据库文件test.db,有表table(id integer, name nvarchar(20),age integer),且有数条数据。

首先用QTcreator创建一个基于Widget类的窗口,再拖一个tableview到widget中,保存,然后按照如下方法进行:

1.在widget.h中增添头文件:QtSql/qsql.h、QtSql/QsqlDatabase、QtSql/QsqlQuery、QtSql/QsqlQueryModel

2.在.pro工程文件中添加:QT+=sql

3.在widget.cpp中widget的构造函数中添加如下代码:

QsqDatabase db = QsqlDatabase::addDatabase("QSQLITE")

db.setDatabaseName("test.db")

if(!db.open())

{

//错误处理

}

static QSqlQueryModel *model = new QSqlQueryModel(ui->tableview)

model->setQuery(QString("select * from table"))

model->setHeaderData(0,Qt::Horizontal,QObject::tr("编号"))

model->setHeaderData(1,Qt::Horizontal,QObject::tr("姓名"))

model->setHeaderData(2,Qt::Horizontal,QObject::tr("年龄"))

ui->tableview->setModel(model)

db->close()

这样之后,table表里的内容就会显示到tableview中了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9461642.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存