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

QChart實現(xiàn)ui界面上指定位置餅狀圖、圓環(huán)圖的繪制

這篇具有很好參考價值的文章主要介紹了QChart實現(xiàn)ui界面上指定位置餅狀圖、圓環(huán)圖的繪制。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言

近期開發(fā)遇上了繪制餅圖的需求,筆者前期使用QCustomPlot圖形庫進行一些圖形組件的開發(fā)是非常方便的,但是這個庫沒有實現(xiàn)餅圖的繪制,所以后面是使用QChart來實現(xiàn)餅狀圖的開發(fā)。本文主要講述了使用Qt下的Charts 模塊來進行餅圖的繪制,并結(jié)合Qt Creator里面的示例,在這里編寫了一個簡單的示例實現(xiàn)了餅狀圖及圓環(huán)圖的繪制,并將相關(guān)代碼展現(xiàn)出來以便大家學(xué)習(xí),如有錯誤之處,歡迎大家批評指正。

項目效果QChart實現(xiàn)ui界面上指定位置餅狀圖、圓環(huán)圖的繪制


提示:以下是本篇文章正文內(nèi)容,下面案例可供參考

一、Qt下的示例

Qt 為 Qt Charts 提供了一系列示例,我們直接打開Qt Creator里面的示例并搜索關(guān)鍵字“chart”即可看到Qt的這些例子,其中不僅僅是餅圖,還有各種常見的圖形組件開發(fā):
QChart實現(xiàn)ui界面上指定位置餅狀圖、圓環(huán)圖的繪制

二、實現(xiàn)步驟

首先在項目pro文件中添加Charts模塊:

QT       += charts

頭文件和命名空間:

#include <QtCharts>

QT_CHARTS_USE_NAMESPACE

Qt 中實現(xiàn)餅圖的繪制,主要使用了 QPieSeries + QPieSlice + QChart + QChartView 這四個類。
1.QPieSeries類,創(chuàng)建餅圖數(shù)據(jù);
2.QPieSlice類,代表組成餅圖的每一份;
3.QChart類,創(chuàng)建圖表
4.QChartView類,顯示圖表

繪制餅圖
第一種方法:實例化QChartView對象,再將該對象添加到widget里
第二種方法:提升widget控件為QChartView,再使用setChart添加圖表
所以在ui界面上添加widget控件,實現(xiàn)指定widget位置處繪制這些圖形。

繪制圓環(huán)圖
相當(dāng)于在餅圖中間添加了一個圓孔,與餅圖代碼類似,在實例化QPieSeries對象后,使用setHoleSize(num)函數(shù)(0<=num<=1),來設(shè)置圓孔的尺寸大小。

詳情可見后文中的完整代碼

三、示例完整代碼展示

1.customslice.h
該類繼承于QPieSlice,實現(xiàn)鼠標經(jīng)過該份餅圖時高亮

#ifndef CUSTOMSLICE_H
#define CUSTOMSLICE_H

#include <QtCharts/QPieSlice>

QT_CHARTS_USE_NAMESPACE

class CustomSlice : public QPieSlice
{
    Q_OBJECT

public:
    CustomSlice(QString label, qreal value);

public:
    QBrush originalBrush();

public Q_SLOTS:
    void showHighlight(bool show);

private:
    QBrush m_originalBrush;
};

#endif // CUSTOMSLICE_H

2.customslice.cpp

#include "customslice.h"

QT_CHARTS_USE_NAMESPACE

CustomSlice::CustomSlice(QString label, qreal value)
    : QPieSlice(label, value)
{
    connect(this, &CustomSlice::hovered, this, &CustomSlice::showHighlight);
}

QBrush CustomSlice::originalBrush()
{
    return m_originalBrush;
}

void CustomSlice::showHighlight(bool show)
{
    if(show)
    {
        QBrush brush = this->brush();
        m_originalBrush = brush;
        brush.setColor(brush.color().lighter());
        setBrush(brush);
    }
    else
    {
        setBrush(m_originalBrush);
    }
}

3.widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QtCharts>
#include "customslice.h"

QT_CHARTS_USE_NAMESPACE

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

    void initChart();

private:
    Ui::Widget *ui;

    QChartView *m_breadView;
    QPieSeries *m_breadSeries;

    QChartView *m_myView;
    QPieSeries *m_mySeries;

    QChartView *m_ringView;
    QPieSeries *m_ringSeries;
};
#endif // WIDGET_H

4.widget.cpp
下面的代碼可以取消注釋,查看相關(guān)效果

#include "widget.h"
#include "ui_widget.h"

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

    this->setWindowTitle("餅圖測試");
    this->showMaximized();   //設(shè)置窗口最大化
    initChart();
}

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

void Widget::initChart()
{
    //繪制餅圖的兩種方法
    //一、實例化QChartView對象,再將該對象添加到widget里
    //二、提升widget控件為QChartView
    //下面的代碼可以取消注釋,查看相關(guān)效果

    //第一種方法
    //1.QPieSeries類,創(chuàng)建餅圖數(shù)據(jù)
    m_breadSeries = new QPieSeries();
    //添加數(shù)據(jù)常規(guī)方法
    //m_breadSeries->append("red",1);
    //m_breadSeries->append("green",2);
    //m_breadSeries->append("blue",7);
    //創(chuàng)建CustomSlice對象,實現(xiàn)鼠標經(jīng)過該份餅圖時高亮
    *m_breadSeries << new CustomSlice("red",1);
    *m_breadSeries << new CustomSlice("green",2);
    *m_breadSeries << new CustomSlice("blue",7);
    m_breadSeries->setLabelsVisible();   //設(shè)置標簽可見

    //2.QPieSlice類,代表每一份餅圖
    QPieSlice *breadRed = m_breadSeries->slices().at(0);
    QPieSlice *breadGreen = m_breadSeries->slices().at(1);
    QPieSlice *breadBlue = m_breadSeries->slices().at(2);
    breadRed->setColor(QColor(255,0,0,255));
    breadGreen->setColor(QColor(0,255,0,255));
    breadBlue->setColor(QColor(0,0,255,255));

    //3.QChart類,創(chuàng)建圖表
    QChart *breadChart = new QChart;
    breadChart->addSeries(m_breadSeries);
    breadChart->setTitle("BreadChart");
    //breadChart->legend()->hide();                             //隱藏圖例
    //breadChart->setTheme(QChart::ChartThemeBrownSand);        //設(shè)置主題,會影響餅圖顏色
    //breadChart->setAnimationOptions(QChart::AllAnimations);   //動畫效果

    //4.QChartView類,顯示圖表
    m_breadView = new QChartView(breadChart);
    m_breadView->setRenderHint(QPainter::Antialiasing);   //設(shè)置渲染屬性
    QGridLayout *myLayout = new QGridLayout();
    myLayout->addWidget(m_breadView);
    ui->widget_bread->setLayout(myLayout);

    //第二種方法
    m_mySeries = new QPieSeries();
    m_mySeries->append("red",1);
    m_mySeries->append("green",2);
    m_mySeries->append("blue",7);
    QPieSlice *myRed = m_mySeries->slices().at(0);
    QPieSlice *myGreen = m_mySeries->slices().at(1);
    QPieSlice *myBlue = m_mySeries->slices().at(2);
    myRed->setColor(QColor(255,0,0,255));
    myGreen->setColor(QColor(0,255,0,255));
    myBlue->setColor(QColor(0,0,255,255));
    QChart *myChart = new QChart;
    myChart->addSeries(m_mySeries);
    myChart->setTitle("MyChart");
    //myChart->legend()->hide();                      //隱藏圖例
    //myChart->setTheme(QChart::ChartThemeBlueNcs);   //設(shè)置主題
    myChart->setAnimationOptions(QChart::AllAnimations);   //動畫效果
    ui->view_bread->setChart(myChart);
    ui->view_bread->setRenderHint(QPainter::Antialiasing);

    //繪制圓環(huán)圖
    //1.相當(dāng)于在餅圖中間添加了一個圓孔,與餅圖代碼類似
    //2.setHoleSize(num),設(shè)置圓孔尺寸,0<=num<=1
    m_ringSeries = new QPieSeries();
    m_ringSeries->setHoleSize(0.35);   //設(shè)置圓孔的尺寸大小
    m_ringSeries->append("red",1);
    m_ringSeries->append("green",2);
    m_ringSeries->append("blue",7);
    QPieSlice *ringRed = m_ringSeries->slices().at(0);
    QPieSlice *ringGreen = m_ringSeries->slices().at(1);
    QPieSlice *ringBlue = m_ringSeries->slices().at(2);
    ringRed->setColor(QColor(255,0,0,255));
    ringGreen->setColor(QColor(0,255,0,255));
    ringBlue->setColor(QColor(0,0,255,255));
    QChart *ringChart = new QChart;
    ringChart->addSeries(m_ringSeries);
    ringChart->setTitle("Ring Charts");                      //設(shè)置標題
    //ringChart->setTheme(QChart::ChartThemeBlueCerulean);   //設(shè)置主題
    //ringChart->legend()->setFont(QFont("Arial", 7));       //設(shè)置圖例字體
    m_ringView = new QChartView(ringChart);
    m_ringView->setRenderHint(QPainter::Antialiasing);       //設(shè)置渲染屬性
    QGridLayout *ringLayout = new QGridLayout();
    ringLayout->addWidget(m_ringView);
    ui->widget_ring->setLayout(ringLayout);
}

5.widget.ui
這里進行了布局設(shè)置,這樣界面內(nèi)容會跟隨界面大小拉伸
QChart實現(xiàn)ui界面上指定位置餅狀圖、圓環(huán)圖的繪制

總結(jié)

Qt Charts模塊提供了一系列容易使用的圖表組件,需要使用charts組件時,需要導(dǎo)入這個模塊,所以在pro文件中一定不要忘記添加“QT += charts”。這里只是簡單的使用該模塊來實現(xiàn)餅狀圖的繪制,要學(xué)習(xí)charts模塊還可以通過Qt Creator里面相關(guān)的示例。在安裝Qt Creator的時候,需要勾選上這個模塊,不然是不能使用的!

本示例完整代碼百度網(wǎng)盤鏈接:https://pan.baidu.com/s/1RAxh-VMrC12FzvxwNsTRwQ
提取碼:xxcj


hello:
共同學(xué)習(xí),共同進步,如果還有相關(guān)問題,可在評論區(qū)留言進行討論。

參考文章:Qt之餅圖
QChart之QPieSeries繪制餅狀圖文章來源地址http://www.zghlxwxcb.cn/news/detail-479602.html

到了這里,關(guān)于QChart實現(xiàn)ui界面上指定位置餅狀圖、圓環(huán)圖的繪制的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 可視化Echarts 柱狀圖、餅狀圖、折線圖的設(shè)置

    可視化Echarts 柱狀圖、餅狀圖、折線圖的設(shè)置

    柱狀圖? 餅狀圖? 折線圖? 柱狀圖? ???????? 基本的柱狀圖設(shè)置 ??????? ?效果:? ?????? ??柱狀圖的更多效果 ? ? ? ? 標注大值和最小值? ?????????標注平均值 ????????水平柱狀圖設(shè)置 (將x軸的配置放在y軸配置中) ????????效果:? 餅狀圖? ????

    2023年04月24日
    瀏覽(25)
  • python柱狀圖、直方圖和餅狀圖統(tǒng)計學(xué)生成績

    python柱狀圖、直方圖和餅狀圖統(tǒng)計學(xué)生成績

    Python的matplotlib庫具有很強大的繪圖功能,可以利用這個庫函數(shù)來進行學(xué)生成績統(tǒng)計。假如有一個班的某科學(xué)生成績?nèi)绫?所示,可以用柱狀圖、直方圖和餅狀圖三種方式來進行統(tǒng)計分析。下邊介紹一下操作步驟。 表1 學(xué)生成績表 學(xué)號 分數(shù) 20221001 61 20221002 68 20221003 74 20221004 7

    2024年02月11日
    瀏覽(18)
  • 數(shù)據(jù)可視化|Python之Pyecharts將“爬蟲數(shù)據(jù)”繪制餅狀圖

    前言 本文是該專欄的第40篇,后面會持續(xù)分享python數(shù)據(jù)分析的干貨知識,記得關(guān)注。 在項目中,可能有些同學(xué)或多或少遇見這樣的需求。將爬蟲采集下來的數(shù)據(jù),進行圖像可視化處理,方便其他業(yè)務(wù)線進行數(shù)據(jù)分析處理。 而本文,筆者將以某個 爬蟲案例 的采集數(shù)據(jù)為例子,

    2024年01月18日
    瀏覽(35)
  • Cesium和Echarts的完美集成展示3D柱狀圖、折線圖和餅狀圖

    在本文中,我們將介紹如何將Cesium和Echarts兩個強大的數(shù)據(jù)可視化工具進行集成,實現(xiàn)在Cesium地球上展示3D柱狀圖、折線圖和餅狀圖的功能。Cesium是一個用于創(chuàng)建基于Web的地球瀏覽和可視化應(yīng)用程序的JavaScript庫,而Echarts是一個功能強大的數(shù)據(jù)可視化庫,支持多種圖表類型。 首

    2024年02月04日
    瀏覽(228)
  • echarts 餅狀圖 label 既在內(nèi)部顯示數(shù)值(百分比),又顯示外部指示線

    echarts 餅狀圖 label 既在內(nèi)部顯示數(shù)值(百分比),又顯示外部指示線

    項目開發(fā)中,產(chǎn)品經(jīng)理繪制的原型圖中,需要前端實現(xiàn)一個餅狀圖,且既在餅圖內(nèi)部中 顯示 百分比,又顯示 外部指示線及數(shù)值,效果如下圖所示: 查了下 Echarts 官網(wǎng)文檔,需要配置 series 下的 label 配置項,如下所示: 其中,formatter 是標簽內(nèi)容的格式器,用于轉(zhuǎn)換格式。支

    2024年02月10日
    瀏覽(21)
  • 使用pygal庫繪制直方圖、XY線圖和餅狀圖的技術(shù)指南

    pygal是一個功能強大的Python庫,用于繪制漂亮且交互性強的數(shù)據(jù)可視化圖表。本文將深入介紹如何使用pygal庫繪制直方圖、XY線圖和餅狀圖,并通過案例講解幫助讀者更好地掌握這些功能。 直方圖是一種用于表示數(shù)據(jù)分布的圖表,通過柱形的高度展示不同數(shù)值的頻率。下面是繪

    2024年01月21日
    瀏覽(25)
  • 在vue項目使用數(shù)據(jù)可視化 echarts ,柱狀圖、折線圖、餅狀圖使用示例詳解及屬性詳解

    在vue項目使用數(shù)據(jù)可視化 echarts ,柱狀圖、折線圖、餅狀圖使用示例詳解及屬性詳解

    ? npm install echarts --save 頁面導(dǎo)入: ? import * as echarts from \\\'echarts\\\' 全局導(dǎo)入: ?main.js 中,導(dǎo)入并注冊到全局 ? import echarts from \\\'echarts\\\' ? Vue.prototype.$echarts = echarts

    2024年02月13日
    瀏覽(28)
  • 微信小程序 通過 pageScrollTo 滾動到界面指定位置

    微信小程序 通過 pageScrollTo 滾動到界面指定位置

    我們可以先創(chuàng)建一個page 注意 一定要在page中使用 因為pageScrollTo控制的是頁面滾動 你在組件里用 他就失效了 我們先來看一個案例 wxml 代碼如下 wxss 代碼如下 js 參考代碼如下 關(guān)鍵就在于 我們在頁面上寫了一個 id為pinglun的元素 然后 調(diào)用pageScrollTo 指定選擇id為pinglun的元素 當(dāng)然

    2024年02月03日
    瀏覽(19)
  • Unity開發(fā)筆記:截取指定位置含有UI的場景截圖并輸出

    Unity開發(fā)筆記:截取指定位置含有UI的場景截圖并輸出

    學(xué)習(xí)記錄整理,自用,也希望能幫助到有相同需求的人。 如果直接截全圖: 截取指定位置含有UI的場景截圖: 例如這種情況下只想要中間的: UI所在的Canvas設(shè)置為RenderMode.ScreenSpaceCamera并掛載相機,然后設(shè)置該相機的渲染RenderTexture并開始render,注意這里渲染是從屏幕中心擴展

    2024年02月13日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包