国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【嵌入式Qt開發(fā)入門】如何使用Qt進行繪制實時圖表——QChart 圖表

這篇具有很好參考價值的文章主要介紹了【嵌入式Qt開發(fā)入門】如何使用Qt進行繪制實時圖表——QChart 圖表。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

????????要想使用 Qt Charts,我們的 Qt 版本得使用 Qt 5.7 之后的版本。其實 Qt Charts 并不是 Qt 5.7 才有的,是在 Qt 5.7 以前只有商業(yè)版本的 Qt 才有 Qt Charts。我們能免費下載的 Qt 版本都是社區(qū)(開源)版本。

????????Qt Charts 很方便的繪制我們常見的曲線圖、折線圖、柱狀圖和餅狀圖等圖表。不用自己花精力去了解第三方組件的使用了或者開發(fā)第三方組件。Qt 的幫助文檔里已經(jīng)有說明 Qt Charts 主要部件的使用方法。需要用到時我們可以查看 Qt 文檔就可以了。

????????下面我們主要簡介一下 Qt Charts 模塊,首先先看它的繼承關系,(看繼承關系可以了解這 個類是怎么來的,它不可能是一下子崩出來的)。

????????至于怎么查看 QChart 類的繼承關系,使用Ctrl + Shift + T ,點擊要查詢的類的繼承關系。

【嵌入式Qt開發(fā)入門】如何使用Qt進行繪制實時圖表——QChart 圖表,Linux,Qt,qt,開發(fā)語言,ui,ubuntu,linux

????????要想在項目里使用 Qt Charts 模塊,需要在 pro 文件下添加以下語句。

QT += charts

?????????如果我們點擊查看 Qt Charts 類,我們可以看到要想使用 Qt Charts 類,除了需要包括相應 的頭文件外,還需要使用命名空間,格式如下。

QT_CHARTS_USE_NAMESPACE

????????或者在頭文件類外加上以下語句。

using namespace QtCharts;

????????下面我們直接開始例子,了解一下 Qt Charts 的使用。

應用實例

????????本例目的:快速了解 Qt Charts 的使用。例子非常實用,除了可以繪制靜態(tài)曲線,也可以繪 制動態(tài)曲線。例子可以直接應用到實際項目中利用提供接口讀取數(shù)據(jù)繪制動態(tài)曲線圖。

????????項目名稱:qtchart_test,實時動態(tài)曲線?;玖鞒倘缦拢菏褂靡粋€ QSplineSeries 對象(曲線),一個QChart(圖表),一個 QChartView(圖表視 圖)。首先我們創(chuàng)建?chart 圖表,然后創(chuàng)建兩條坐標軸 axisX 與 axisY。將兩條坐標軸添加到 chart 圖表上,再將 splineSeries 曲線與坐標軸連系起來。最后再將 chart 圖表添加到 chartView 圖表視圖中。曲線上的數(shù)據(jù)由系統(tǒng)產(chǎn)生隨機數(shù),使用定時器更新數(shù)據(jù)。

????????項目文件 qtchart_test.pro 文件第一行添加的代碼部分如下。

QT         += core gui charts

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    mainwindow.h

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

????????在頭文件“mainwindow.h”具體代碼如下。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QChartView>
#include <QSplineSeries>
#include <QScatterSeries>
#include <QDebug>
#include <QValueAxis>
#include <QTimer>
#include <QMainWindow>

/*  必需添加命名空間 */
QT_CHARTS_USE_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private:
    /* 接收數(shù)據(jù)接口 */
    void receivedData(int);

    /* 數(shù)據(jù)最大個數(shù) */
    int maxSize;

    /* x軸上的最大值 */
    int maxX;

    /* y軸上的最大值 */
    int maxY;

    /* y軸 */
    QValueAxis *axisY;

    /* x軸 */
    QValueAxis *axisX;

    /* QList int類型容器 */
    QList<int> data;

    /* QSplineSeries對象(曲線)*/
    QSplineSeries *splineSeries;

    /* QChart圖表 */
    QChart *chart;

    /* 圖表視圖 */
    QChartView *chartView;

    /* 定時器 */
    QTimer *timer;

private slots:
    void timerTimeOut();
};
#endif // MAINWINDOW_H

????????在源文件“mainwindow.cpp”具體代碼如下。

#include "mainwindow.h"
#include <QDateTime>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    /* 設置最顯示位置與大小 */
    this->setGeometry(0, 0, 800, 480);
    /* 最大儲存maxSize - 1個數(shù)據(jù) */
    maxSize = 51;
    /* x軸上的最大值 */
    maxX = 5000;
    /* y軸最大值 */
    maxY = 40;

    /* splineSeries曲線實例化(折線用QLineSeries) */
    splineSeries = new QSplineSeries();
    /* 圖表實例化 */
    chart = new QChart();
    /* 圖表視圖實例化 */
    chartView = new QChartView();

    /* 坐標軸 */
    axisY = new QValueAxis();
    axisX = new QValueAxis();
    /* 定時器 */
    timer = new QTimer(this);

    /* legend譯圖例類型,以繪圖的顏色區(qū)分,本例設置為隱藏 */
    chart->legend()->hide();
    /* chart設置標題 */
    chart->setTitle("實時動態(tài)曲線示例");
    /* 添加一條曲線splineSeries */
    chart->addSeries(splineSeries);

    /* 設置顯示格式 */
    axisY->setLabelFormat("%i");
    /* y軸標題 */
    axisY->setTitleText("溫度/℃");
    /* y軸標題位置(設置坐標軸的方向) */
    chart->addAxis(axisY, Qt::AlignLeft);
    /* 設置y軸范圍 */
    axisY->setRange(0, maxY);
    /* 將splineSeries附加于y軸上 */
    splineSeries->attachAxis(axisY);

    /* 設置顯示格式 */
    axisX->setLabelFormat("%i");
    /* x軸標題 */
    axisX->setTitleText("時間/ms");
    /* x軸標題位置(設置坐標軸的方向) */
    chart->addAxis(axisX, Qt::AlignBottom);
    /* 設置x軸范圍 */
    axisX->setRange(0, maxX);
    /* 將splineSeries附加于x軸上 */
    splineSeries->attachAxis(axisX);

    /* 將圖表的內(nèi)容設置在圖表視圖上 */
    chartView->setChart(chart);
    /* 設置抗鋸齒 */
    chartView->setRenderHint(QPainter::Antialiasing);

    /* 設置為圖表視圖為中心部件 */
    setCentralWidget(chartView);

    /* 定時200ms */
    timer->start(200);
    /* 信號槽連接 */
    connect(timer, SIGNAL(timeout()), this, SLOT(timerTimeOut()));

    /* 設置隨機種子,隨機數(shù)初始化 */
    qsrand(time(NULL));
}

MainWindow::~MainWindow()
{
}

void MainWindow::timerTimeOut()
{
    /* 產(chǎn)生隨機0~maxY之間的數(shù)據(jù) */
    receivedData(qrand() % maxY );
}

void MainWindow::receivedData(int value)
{
    /* 將數(shù)據(jù)添加到data中 */
    data.append(value);

    /* 當儲存數(shù)據(jù)的個數(shù)大于最大值時,把第一個數(shù)據(jù)刪除 */
    while (data.size() > maxSize) {
        /* 移除data中第一個數(shù)據(jù) */
        data.removeFirst();
    }

    /* 先清空 */
    splineSeries->clear();

    /* 計算x軸上的點與點之間顯示的間距 */
    int xSpace = maxX / (maxSize - 1);

    /* 添加點,xSpace * i 表示第i個點的x軸的位置 */
    for (int i = 0; i < data.size(); ++i) {
        splineSeries->append(xSpace * i, data.at(i));
    }
}

? ? ? ?receivedData(int value)函數(shù)是實現(xiàn)曲線移動的代碼,代碼算法是,當數(shù)據(jù)的個數(shù)超過最大值后, 我們就刪除第一個數(shù)據(jù),如此反復,就實現(xiàn)了數(shù)據(jù)移動的過程,同時圖表視圖中的曲線因為值的改變實現(xiàn)了“移動”。文章來源地址http://www.zghlxwxcb.cn/news/detail-531676.html

程序運行效果?????????

到了這里,關于【嵌入式Qt開發(fā)入門】如何使用Qt進行繪制實時圖表——QChart 圖表的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【嵌入式Qt開發(fā)入門】初識Qt——Linux下安裝Qt

    【嵌入式Qt開發(fā)入門】初識Qt——Linux下安裝Qt

    ????????Qt 是一個跨平臺的 C++開發(fā)庫。主要用來開發(fā)圖形用戶界面(Graphical User Interface,簡 稱 GUI)程序。 ????????Qt 雖然經(jīng)常被當做一個 GUI 庫,用來開發(fā)圖形界面應用程序,但這并不是 Qt 的全部; Qt 除了可以繪制漂亮的界面(包括控件、布局、交互),還包含很多

    2024年02月16日
    瀏覽(94)
  • 【嵌入式Qt開發(fā)入門】在Ubuntu下編寫C++

    【嵌入式Qt開發(fā)入門】在Ubuntu下編寫C++

    ????????在 Ubuntu 上面編寫 C++,本文內(nèi)容主要介紹在 Ubuntu 在終端窗口下使用 vi/vim 編輯一 個 C++源文件。通過編寫最簡單的示例“Hello,World!”。帶領大家學習如何在 Ubuntu 終端下編輯和編譯 C++。這里要求大家會在 Ubuntu 上使用 vi/vim,也就是要求大家有一點 Ubuntu 入門的基

    2024年02月11日
    瀏覽(23)
  • 使用Yocto進行嵌入式Linux開發(fā)3 Toaster

    使用Yocto進行嵌入式Linux開發(fā)3 Toaster

    我們已經(jīng)知道了如何在Poky中使用BitBake構建圖像image,那么我們將學習如何使用Toaster完成同樣的操作。 Toaster是一個用于配置和運行構建的Web接口。它與BitBake和Poky構建系統(tǒng)通信,以管理和收集有關構建、軟件包和鏡像的信息。 使用Toaster的兩種方法: 本地 可以將Toaster作為本

    2024年02月08日
    瀏覽(21)
  • 嵌入式開發(fā)--CubeMX使用入門教程

    嵌入式開發(fā)--CubeMX使用入門教程

    嵌入式開發(fā)–CubeMX使用入門教程 傳統(tǒng)的單片機開發(fā)時,需要針對片上外設做各種初始化的工作,相當麻煩。 CubeMX是ST公司出品的一款圖形化代碼生成工具,通過圖形化界面,可以非常直觀的配置好各種片上外設,時鐘,中斷,DMA等等各種設備的參數(shù),然后CubeMX可以直接生成初

    2024年04月12日
    瀏覽(31)
  • 使用Yocto進行嵌入式Linux開發(fā)1 Yocto簡介

    使用Yocto進行嵌入式Linux開發(fā)1 Yocto簡介

    Yocto項目是Linux基金會的一個工作組,它是一個開源協(xié)作項目,幫助開發(fā)人員創(chuàng)建基于Linux的定制系統(tǒng),這些系統(tǒng)專為嵌入式產(chǎn)品而設計,與產(chǎn)品的硬件架構無關。Yocto項目提供了一個靈活的工具集和開發(fā)環(huán)境,使世界各地的嵌入式設備開發(fā)人員能夠通過共享技術、軟件棧、配

    2024年02月09日
    瀏覽(29)
  • 使用VSCode clangd插件進行l(wèi)inux內(nèi)核代碼閱讀和嵌入式開發(fā)

    使用VSCode clangd插件進行l(wèi)inux內(nèi)核代碼閱讀和嵌入式開發(fā)

    在進行 Linux 內(nèi)核代碼閱讀和嵌入式開發(fā)時,選擇合適的開發(fā)工具至關重要。VSCode 是一個流行的跨平臺編輯器,并且它的擴展生態(tài)系統(tǒng)非常強大。在這篇博客中,我們將介紹如何使用 VSCode Clangd 插件來提高 Linux 內(nèi)核代碼的閱讀和嵌入式開發(fā)效率。 Clangd 是一個基于 Clang 的語言

    2024年02月09日
    瀏覽(30)
  • 使用Yocto進行嵌入式Linux開發(fā)2 第一個基于Poky的系統(tǒng)

    使用Yocto進行嵌入式Linux開發(fā)2 第一個基于Poky的系統(tǒng)

    Ubuntu: Fedora 在我們的開發(fā)主機系統(tǒng)上安裝了所需的軟件包后,我們可以使用 Git 下載當前 LTS 版本的 Poky 源代碼,命令如下: 下載完成后,poky 目錄中的內(nèi)容如下: 在poky目錄中存在oe-init-build-env腳本,用于設置構建環(huán)境。 這里,[build-directory] 是一可選參數(shù),用于指定配置環(huán)境

    2024年02月08日
    瀏覽(56)
  • 嵌入式開發(fā)板qt gdb調(diào)試

    嵌入式開發(fā)板qt gdb調(diào)試

    1) 啟動 gdbserver ssh 或者 telnet 登陸揚創(chuàng)平板 192.168.0.253, 進入命令行執(zhí)行如下: chmod 777 /home/HelloWorld (2) 打 開 QTcreator-Debug-StartDebugging-Attach to Running Debug Server 進行如下設置,設置監(jiān)聽端口10000. 點擊上圖中的按鈕,由于按鈕中的函數(shù)設置了斷點,則跳到斷點,界面如下

    2024年02月04日
    瀏覽(34)
  • 嵌入式Qt 開發(fā)一個音樂播放器

    嵌入式Qt 開發(fā)一個音樂播放器

    上篇文章:RK3568源碼編譯與交叉編譯環(huán)境搭建,進行了OK3568開發(fā)板軟件開發(fā)環(huán)境搭建,通過編譯RK3568的源碼,可以得到Qt開發(fā)的交叉編譯相關工具。 本篇,就來在搭建好的軟件開發(fā)中,進行Qt軟件的開發(fā)測試。由于Qt是支持跨平臺的,因此本篇的音樂播放器,先在Windows上編寫

    2024年02月02日
    瀏覽(41)
  • 嵌入式QT- QT使用MQTT

    嵌入式QT- QT使用MQTT

    目錄 一、MQTT介紹 二、MQTT概念 ? 2.1 訂閱(Subscribtion) ? 2.2?會話(Session) ? 2.3 主題名(Topic Name) ? ?2.4 主題篩選器(Topic Filter) ? ?2.5 消息訂閱 三、MQTT中的角色 3.1 客戶端 3.2 服務器 四、X86平臺安裝mosquitto 4.1 下載?mosquitto 服務器 4.2?下載 mosquitto 客戶端 4.3?mosquitto 命令

    2024年02月13日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包