最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C/C++ Qt QChart繪圖組件的具體使用

 更新時間:2021年11月25日 16:24:39   作者:lyshark  
QtCharts 組件是QT中提供圖表繪制的模塊,用來繪制常規(guī)圖形,本文就詳細的介紹了QChart的使用,以及柱狀圖,折線圖等常用的圖形的實現(xiàn),感興趣的可以了解一下

QtCharts 組件是QT中提供圖表繪制的模塊,該模塊可以方便的繪制常規(guī)圖形,Qtcharts 組件基于GraphicsView模式實現(xiàn),其核心是QChartViewQChart的二次封裝版。

在使用繪圖模塊時需要在pro文件中包含QT += charts來引入繪圖類庫。

然后還需在頭文件中定義QT_CHARTS_USE_NAMESPACE宏,這樣才可以正常的使用繪圖功能。

一般情況下我們會在mainwindows.h頭文件中增加如下代碼段。

#include <QMainWindow>
#include <QtCharts>
QT_CHARTS_USE_NAMESPACE

// 解決MSVC編譯時,界面漢字亂碼的問題
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif

由于QT中不存在單獨的繪圖畫布,因此在繪圖前我們需要在窗體中放入一個graphicsView組件。

并在該組件上右鍵將其提升為QChartView

輸入需要提升的組件名稱,即可將該組件提升為全局繪圖組件。

繪制折線圖

折線圖的使用非常廣泛,如下代碼我們首先使用InitChart()將畫布初始化,接著調(diào)用SetData()實現(xiàn)在畫布中填充數(shù)據(jù),完整代碼如下。

#include "mainwindow.h"
#include "ui_mainwindow.h"

// 初始化Chart圖表
void MainWindow::InitChart()
{
    // 創(chuàng)建圖表的各個部件
    QChart *chart = new QChart();
    chart->setTitle("系統(tǒng)性能統(tǒng)計圖");

    // 將Chart添加到ChartView
    ui->graphicsView->setChart(chart);
    // this->setCentralWidget( ui->graphicsView);
    ui->graphicsView->setRenderHint(QPainter::Antialiasing);

    // 設(shè)置圖表主題色
    ui->graphicsView->chart()->setTheme(QChart::ChartTheme(0));

    // 創(chuàng)建曲線序列
    QLineSeries *series0 = new QLineSeries();
    QLineSeries *series1 = new QLineSeries();

    series0->setName("一分鐘負載");
    series1->setName("五分鐘負載");

    // 序列添加到圖表
    chart->addSeries(series0);
    chart->addSeries(series1);

    // 其他附加參數(shù)
    series0->setPointsVisible(false);       // 設(shè)置數(shù)據(jù)點可見
    series1->setPointLabelsVisible(false);  // 設(shè)置數(shù)據(jù)點數(shù)值可見

    // 創(chuàng)建坐標軸
    QValueAxis *axisX = new QValueAxis;    // X軸
    axisX->setRange(1, 100);               // 設(shè)置坐標軸范圍
    axisX->setTitleText("X軸標題");         // 標題
    axisX->setLabelFormat("%d %");         // 設(shè)置x軸格式
    axisX->setTickCount(3);               // 設(shè)置刻度
    axisX->setMinorTickCount(3);

    QValueAxis *axisY = new QValueAxis;    // Y軸
    axisY->setRange(0, 100);               // Y軸范圍(-1 - 20)
    axisY->setTitleText("Y軸標題");         // 標題

    // 設(shè)置X于Y軸數(shù)據(jù)集
    chart->setAxisX(axisX, series0);   // 為序列設(shè)置坐標軸
    chart->setAxisY(axisY, series0);

    chart->setAxisX(axisX, series1);   // 為序列設(shè)置坐標軸
    chart->setAxisY(axisY, series1);

    // 圖例被點擊后觸發(fā)
    foreach (QLegendMarker* marker, chart->legend()->markers())
    {
       QObject::disconnect(marker, SIGNAL(clicked()), this, SLOT(on_LegendMarkerClicked()));
       QObject::connect(marker, SIGNAL(clicked()), this, SLOT(on_LegendMarkerClicked()));
    }
}

// 為序列生成數(shù)據(jù)
void MainWindow::SetData()
{
    // 獲取指針
    QLineSeries *series0=(QLineSeries *)ui->graphicsView->chart()->series().at(0);
    QLineSeries *series1=(QLineSeries *)ui->graphicsView->chart()->series().at(1);

    // 清空圖例
    series0->clear();
    series1->clear();

    // 賦予數(shù)據(jù)
    qreal t=0,intv=1;
    for(int i=1;i<100;i++)
    {
       series0->append(t,i);       // 設(shè)置軸粒度以及數(shù)據(jù)
       series1->append(t,i+10);    // 此處用隨機數(shù)替代
       t+=intv;                    // X軸粒度
    }
}

// 將添加的widget控件件提升為QChartView類
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    InitChart();
    SetData();
}

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

// 圖例點擊后顯示與隱藏線條
void MainWindow::on_LegendMarkerClicked()
{
    QLegendMarker* marker = qobject_cast<QLegendMarker*> (sender());

    switch (marker->type())
    {
        case QLegendMarker::LegendMarkerTypeXY:
        {
            marker->series()->setVisible(!marker->series()->isVisible());
            marker->setVisible(true);
            qreal alpha = 1.0;
            if (!marker->series()->isVisible())
                alpha = 0.5;

            QColor color;
            QBrush brush = marker->labelBrush();
            color = brush.color();
            color.setAlphaF(alpha);
            brush.setColor(color);
            marker->setLabelBrush(brush);

            brush = marker->brush();
            color = brush.color();
            color.setAlphaF(alpha);
            brush.setColor(color);
            marker->setBrush(brush);

            QPen pen = marker->pen();
            color = pen.color();
            color.setAlphaF(alpha);
            pen.setColor(color);
            marker->setPen(pen);
            break;
        }
        default:
            break;
    }
}

效果如下所示:

繪制餅狀圖

餅狀圖用于統(tǒng)計數(shù)據(jù)的集的占用百分比,其繪制方式與折線圖基本一致,代碼如下。

#include "mainwindow.h"
#include "ui_mainwindow.h"

// 餅狀圖A
void MainWindow::printA()
{
    // 構(gòu)造數(shù)據(jù) [已用CPU 60%] [剩余CPU 40%]
    QPieSlice *slice_1 = new QPieSlice(QStringLiteral("已使用"), 0.6, this);
    slice_1->setLabelVisible(true);

    QPieSlice *slice_2 = new QPieSlice(QStringLiteral("可用"), 0.4, this);
    slice_2->setLabelVisible(true);

    // 將兩個餅狀分區(qū)加入series
    QPieSeries *series = new QPieSeries(this);
    series->append(slice_1);
    series->append(slice_2);

    // 創(chuàng)建Chart畫布
    QChart *chart = new QChart();
    chart->addSeries(series);
    chart->setAnimationOptions(QChart::AllAnimations); // 設(shè)置顯示時的動畫效果
    chart->setTitle("系統(tǒng)CPU利用率");

    // 將參數(shù)設(shè)置到畫布
    ui->graphicsView->setChart(chart);
    ui->graphicsView->setRenderHint(QPainter::Antialiasing);
    ui->graphicsView->chart()->setTheme(QChart::ChartTheme(0));
}

// 餅狀圖B
void MainWindow::printB()
{
    // 構(gòu)造數(shù)據(jù) [C盤 20%] [D盤 30%] [E盤 50%]
    QPieSlice *slice_c = new QPieSlice(QStringLiteral("C盤"), 0.2, this);
    slice_c->setLabelVisible(true);

    QPieSlice *slice_d = new QPieSlice(QStringLiteral("D盤"), 0.3, this);
    slice_d->setLabelVisible(true);

    QPieSlice *slice_e = new QPieSlice(QStringLiteral("E盤"),0.5,this);
    slice_e->setLabelVisible(true);

    // 將兩個餅狀分區(qū)加入series
    QPieSeries *series = new QPieSeries(this);
    series->append(slice_c);
    series->append(slice_d);
    series->append(slice_e);

    // 創(chuàng)建Chart畫布
    QChart *chart = new QChart();
    chart->addSeries(series);
    chart->setAnimationOptions(QChart::AllAnimations); // 設(shè)置顯示時的動畫效果
    chart->setTitle("系統(tǒng)磁盤信息");

    // 將參數(shù)設(shè)置到畫布
    ui->graphicsView_2->setChart(chart);
    ui->graphicsView_2->setRenderHint(QPainter::Antialiasing);
    ui->graphicsView_2->chart()->setTheme(QChart::ChartTheme(3));   // 設(shè)置不同的主題
}

// 將添加的widget控件件提升為QChartView類
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    printA();
    printB();
}

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

效果如下所示:

繪制柱狀圖

柱狀圖可用于一次展示多個用戶數(shù)據(jù),大體是使用上與折線圖大體一致,其代碼如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 創(chuàng)建人名
    QBarSet *set0 = new QBarSet("張三");
    QBarSet *set1 = new QBarSet("李四");
    QBarSet *set2 = new QBarSet("王五");
    QBarSet *set3 = new QBarSet("蘇三");
    QBarSet *set4 = new QBarSet("劉麻子");

    // 分別為不同人添加bu不同數(shù)據(jù)集
    *set0 << 1 << 2 << 8 << 4 << 6 << 6;
    *set1 << 5 << 2 << 5 << 4 << 5 << 3;
    *set2 << 5 << 5 << 8 << 15 << 9 << 5;
    *set3 << 8 << 6 << 7 << 5 << 4 << 5;
    *set4 << 4 << 7 << 5 << 3 << 3 << 2;

    // 將數(shù)據(jù)集關(guān)聯(lián)到series中
    QBarSeries *series = new QBarSeries();
    series->append(set0);
    series->append(set1);
    series->append(set2);
    series->append(set3);
    series->append(set4);

    // 增加頂部提示
    QChart *chart = new QChart();
    chart->addSeries(series);
    chart->setTitle("當(dāng)前人數(shù)統(tǒng)計");
    chart->setAnimationOptions(QChart::SeriesAnimations);

    // 創(chuàng)建X軸底部提示
    QStringList categories;
    categories << "周一" << "周二" << "周三" << "周四" << "周五" << "周六";

    QBarCategoryAxis *axis = new QBarCategoryAxis();
    axis->append(categories);
    chart->createDefaultAxes();
    chart->setAxisX(axis, series);

    chart->legend()->setVisible(true);
    chart->legend()->setAlignment(Qt::AlignBottom);

    // 將參數(shù)設(shè)置到畫布
    ui->graphicsView->setChart(chart);
    ui->graphicsView->setRenderHint(QPainter::Antialiasing);
    ui->graphicsView->chart()->setTheme(QChart::ChartTheme(0));
}

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

效果如下所示:

到此這篇關(guān)于C/C++ Qt QChart繪圖組件的具體使用的文章就介紹到這了,更多相關(guān) Qt QChart組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言之結(jié)構(gòu)體定義 typedef struct 用法詳解和用法小結(jié)

    C語言之結(jié)構(gòu)體定義 typedef struct 用法詳解和用法小結(jié)

    這篇文章主要介紹了C語言的結(jié)構(gòu)體定義typedef struct用法詳解和用法小結(jié),typedef是類型定義,typedef struct 是為了使用這個結(jié)構(gòu)體方便,感興趣的同學(xué)可以參考閱讀
    2023-03-03
  • 實例代碼講解c++ 繼承特性

    實例代碼講解c++ 繼承特性

    這篇文章主要介紹了c++ 繼承特性的相關(guān)資料,文中示例代碼非常詳細,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C++ pair的用法實例詳解

    C++ pair的用法實例詳解

    這篇文章主要介紹了C++ pair的用法實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 如何通過C++求出鏈表中環(huán)的入口結(jié)點

    如何通過C++求出鏈表中環(huán)的入口結(jié)點

    本文主要介紹了通過C++求解鏈表中環(huán)的入口結(jié)點,即給一個長度為n鏈表,若其中包含環(huán),請找出該鏈表的環(huán)的入口結(jié)點,否則,返回null。需要的朋友可以參考一下
    2021-12-12
  • C++示例講解觀察者設(shè)計模式

    C++示例講解觀察者設(shè)計模式

    觀察者模式是極其重要的一個設(shè)計模式,也是我?guī)啄觊_發(fā)過程中使用最多的設(shè)計模式,本文首先概述觀察者模式的基本概念和Demo實現(xiàn),接著是觀察者模式在C++中的應(yīng)用,最后是對觀察者模式的應(yīng)用場景和優(yōu)缺點進行總結(jié)
    2022-12-12
  • 剖析C++中的常量表達式與省略號的相關(guān)作用

    剖析C++中的常量表達式與省略號的相關(guān)作用

    這篇文章主要介紹了C++中的常量表達式與省略號的相關(guān)作用,以及表達式中的可變參數(shù)模板示例,需要的朋友可以參考下
    2016-01-01
  • C++ ofstream和ifstream詳細用法

    C++ ofstream和ifstream詳細用法

    ofstream是從內(nèi)存到硬盤,ifstream是從硬盤到內(nèi)存,其實所謂的流緩沖就是內(nèi)存空間,本文小編就為大家詳細介紹C++ ofstream和ifstream用法,需要的朋友可以參考下面文章的具體內(nèi)容
    2021-09-09
  • C語言實現(xiàn)linux網(wǎng)卡檢測改進版

    C語言實現(xiàn)linux網(wǎng)卡檢測改進版

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)linux網(wǎng)卡檢測的改進版,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Qt調(diào)用MATLAB引擎混合編程的過程詳解

    Qt調(diào)用MATLAB引擎混合編程的過程詳解

    這篇文章給大家介紹了Qt調(diào)用MATLAB引擎混合編程的全過程,文中通過圖文結(jié)合的方式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • 深入理解C++函數(shù)棧幀

    深入理解C++函數(shù)棧幀

    本文主要介紹了C++函數(shù)棧幀,詳細的介紹了C++函數(shù)棧幀的概念以及使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評論

玉溪市| 淮南市| 体育| 海淀区| 进贤县| 名山县| 府谷县| 阳曲县| 肥乡县| 大埔区| 连山| 阿巴嘎旗| 舞钢市| 马关县| 合江县| 瑞安市| 博乐市| 衡南县| 宜阳县| 方山县| 汉寿县| 东莞市| 新邵县| 都安| 神农架林区| 武强县| 茂名市| 丰县| 景宁| 峡江县| 白朗县| 阳高县| 竹溪县| 扎兰屯市| 玉龙| 海安县| 石首市| 蒲城县| 临江市| 扶绥县| 饶平县|