国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - 詳解C/C++ QT QChart 繪制組件應用

詳解C/C++ QT QChart 繪制組件應用

2022-02-28 14:49lyshark C/C++

Qtcharts 組件基于GraphicsView模式實現,其核心是QChartView和QChart的二次封裝版。本文重點給大家介紹C/C++ QT QChart 繪制組件應用的相關知識,感興趣的朋友一起看看吧

QtCharts 組件是QT中提供圖表繪制的模塊,該模塊可以方便的繪制常規圖形,Qtcharts 組件基于GraphicsView模式實現,其核心是QChartView和QChart的二次封裝版。

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

詳解C/C++ QT QChart 繪制組件應用

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

詳解C/C++ QT QChart 繪制組件應用

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

#include <QMainWindow>
#include <QtCharts>
QT_CHARTS_USE_NAMESPACE

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

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

詳解C/C++ QT QChart 繪制組件應用

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

詳解C/C++ QT QChart 繪制組件應用

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

詳解C/C++ QT QChart 繪制組件應用

繪制折線圖: 折線圖的使用非常廣泛,如下代碼我們首先使用InitChart()將畫布初始化,接著調用SetData()實現在畫布中填充數據,完整代碼如下。

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

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

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

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

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

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

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

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

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

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

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

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

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

// 為序列生成數據
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();

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

效果如下所示:

詳解C/C++ QT QChart 繪制組件應用

繪制餅狀圖: 餅狀圖用于統計數據的集的占用百分比,其繪制方式與折線圖基本一致,代碼如下。

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

// 餅狀圖A
void MainWindow::printA()
{
  // 構造數據 [已用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);

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

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

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

// 餅狀圖B
void MainWindow::printB()
{
  // 構造數據 [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);

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

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

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

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

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

效果如下所示:

詳解C/C++ QT QChart 繪制組件應用

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

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

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

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

  // 分別為不同人添加bu不同數據集
  *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;

  // 將數據集關聯到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("當前人數統計");
  chart->setAnimationOptions(QChart::SeriesAnimations);

  // 創建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);

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

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

效果如下所示:

詳解C/C++ QT QChart 繪制組件應用

到此這篇關于C/C++ QT QChart 繪制組件應用的文章就介紹到這了,更多相關C++ QChart組件內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/LyShark/p/15577113.html

延伸 · 閱讀

精彩推薦
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
主站蜘蛛池模板: 日韩av一区二区在线观看 | 午夜午夜精品一区二区三区文 | 精品在线看 | 天堂中文视频在线观看 | 精品一二三区 | 正在播放国产精品 | 一区二区三区视频 | 国产欧美日韩免费 | 欧日韩毛片 | 国产三级黄色毛片 | 波多野结衣一二三 | 免费无遮挡www小视频 | 国产精品1区 | 免费国产一区 | 中文字幕在线一区二区三区 | 欧美激情一区二区三区 | 日韩欧美二区 | 亚洲日韩中文字幕一区 | 亚洲综合在线视频 | 国产成人精品一区二区三区视频 | 国产乱码精品一区二区三区中文 | 日韩精品在线一区 | 亚洲天堂中文字幕 | 亚洲欧美一区二区三区不卡 | 高清在线一区二区 | 日韩精品一区二区三区免费视频 | 国产一区二区在线免费观看 | 亚洲一区二区精品在线观看 | 在线日本视频 | 欧美大片免费观看 | 亚洲国产精品久久久 | 日日操操 | 婷婷在线视频 | av片在线播放| porn在线视频 | 欧美亚洲免费 | 日韩成人欧美 | 成人片网址 | 久久精品无码一区二区三区 | 欧美一区| 日韩有码视频在线 |