QT使用QChart繪制餅圖
餅圖沒(méi)有坐標(biāo)軸,也不需要坐標(biāo)軸
使用的系列是QPieSeries
餅圖里面一個(gè)一個(gè)的塊稱為切片
舉例:
繪制一個(gè)餅圖,點(diǎn)擊對(duì)應(yīng)切片可以讓切片分離

1、創(chuàng)建圖表視圖并開(kāi)啟抗鋸齒
//1、創(chuàng)建圖表視圖 QChartView * view = new QChartView(this); //開(kāi)啟抗鋸齒 view -> setRenderHint(QPainter::Antialiasing);
2、創(chuàng)建圖表并將圖表設(shè)置給圖表視圖
//2.創(chuàng)建圖表
QChart * chart = new QChart();
//3.將圖表設(shè)置給視圖
view -> setChart(chart);
//設(shè)置標(biāo)題
chart -> setTitle("餅圖");
chart -> legend() -> show(); //顯示或者隱藏圖例(默認(rèn)顯示)
3、創(chuàng)建餅圖系列,并給系列添加切片,并設(shè)置切片的相關(guān)屬性,并綁定餅圖系列的信號(hào)
//創(chuàng)建系列,餅圖沒(méi)有坐標(biāo)軸
QPieSeries * pie = new QPieSeries(this);
//添加切片
//參數(shù)1:對(duì)應(yīng)的圖例名和標(biāo)簽名(標(biāo)簽?zāi)J(rèn)不顯示)
//參數(shù)2:占據(jù)的數(shù)值
QPieSlice * ps1 = new QPieSlice("C語(yǔ)言", 40, this);
pie -> append(ps1);
QPieSlice * ps2 = new QPieSlice("C++", 30, this);
pie -> append(ps2);
//也可以直接在append中指定
pie -> append("JAVA", 25);
pie -> append("C#", 5);
//設(shè)置中間圓孔的大小,值不能超過(guò)1
pie -> setHoleSize(0.2);
//獲取餅圖的切片
//并設(shè)置切片的屬性
auto p1 = pie -> slices().at(0);
//獲取切片占的百分比,是一個(gè)小數(shù)
auto per = p1 -> percentage();
//設(shè)置切片的標(biāo)簽提示
p1 -> setLabel("c語(yǔ)言占" + QString::number(per * 100) + "%");
p1 -> setLabelVisible(true);
//p1->setPen()//設(shè)置畫(huà)筆,改變輪廓
p1 -> setBrush(Qt::red); //改變填充
//點(diǎn)擊信號(hào),某個(gè)切片被點(diǎn)擊了就會(huì)發(fā)出信號(hào),信號(hào)參數(shù)告訴了是哪一個(gè)切片被點(diǎn)擊了
connect(pie, & QPieSeries::clicked, this, [ = ](QPieSlice * p) {
//將被點(diǎn)擊的切片和餅圖分離
if (p -> isExploded()) {
p -> setExploded(false);
} else {
p -> setExploded(true);
}
});4、將系列添加到圖表中
//添加系列 chart->addSeries(pie);
完整代碼:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QtCharts>
#include<QHBoxLayout>
#include<QPieSlice>
#include<QPieSeries>
#include<QBarSeries>
#include<QBarSet>
#include<QAreaSeries>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr) : QWidget(parent)
{
resize(800,600);
QHBoxLayout* h_box=new QHBoxLayout(this);
drawPiePic();
}
~Widget()=default;
//畫(huà)餅圖
void drawPiePic()
{
//1、創(chuàng)建圖表視圖
QChartView* view=new QChartView(this);
//開(kāi)啟抗鋸齒
view->setRenderHint(QPainter::Antialiasing);
this->layout()->addWidget(view);
//2.創(chuàng)建圖表
QChart* chart=new QChart();
//3.將圖表設(shè)置給視圖
view->setChart(chart);
//設(shè)置標(biāo)題
chart->setTitle("餅圖");
chart->legend()->show();//顯示或者隱藏圖例(默認(rèn)顯示)
//創(chuàng)建系列,餅圖沒(méi)有坐標(biāo)軸
QPieSeries* pie=new QPieSeries(this);
//添加切片
//參數(shù)1:對(duì)應(yīng)的圖例名和標(biāo)簽名(標(biāo)簽?zāi)J(rèn)不顯示)
//參數(shù)2:占據(jù)的數(shù)值
QPieSlice* ps1=new QPieSlice("C語(yǔ)言",40,this);
pie->append(ps1);
QPieSlice* ps2=new QPieSlice("C++",30,this);
pie->append(ps2);
//也可以直接在append中指定
pie->append("JAVA",25);
pie->append("C#",5);
//設(shè)置中間圓孔的大小,值不能超過(guò)1
pie->setHoleSize(0.2);
//獲取餅圖的切片
//并設(shè)置切片的屬性
auto p1=pie->slices().at(0);
//獲取切片占的百分比,是一個(gè)小數(shù)
auto per=p1->percentage();
//設(shè)置切片的標(biāo)簽提示
p1->setLabel("c語(yǔ)言占"+QString::number(per*100)+"%");
p1->setLabelVisible(true);
//p1->setPen()//設(shè)置畫(huà)筆,改變輪廓
p1->setBrush(Qt::red);//改變填充
//點(diǎn)擊信號(hào),某個(gè)切片被點(diǎn)擊了就會(huì)發(fā)出信號(hào),信號(hào)參數(shù)告訴了是哪一個(gè)切片被點(diǎn)擊了
connect(pie,&QPieSeries::clicked,this,[=](QPieSlice* p){
//將被點(diǎn)擊的切片和餅圖分離
if(p->isExploded())
{
p->setExploded(false);
}
else
{
p->setExploded(true);
}
});
//添加系列
chart->addSeries(pie);
}
};
#endif // WIDGET_H到此這篇關(guān)于QT使用QChart繪制餅圖的文章就介紹到這了,更多相關(guān)QT QChart繪制餅圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
VS2010/MFC編程(常用控件:樹(shù)形控件Tree Control控件創(chuàng)建h和實(shí)例)
本篇文章介紹了VS2010/MFC編程:常用控件:樹(shù)形控件Tree Control,包括樹(shù)形控件的創(chuàng)建、CTreeCtrl類(lèi)的主要成員函數(shù)和應(yīng)用實(shí)例有興趣的可以了解一下。2016-12-12
C++初學(xué)者之根據(jù)輸入的任何一個(gè)正整數(shù),輸出可能被表示的連續(xù)正整數(shù)
這篇文章主要介紹了C++初學(xué)者之根據(jù)輸入的任何一個(gè)正整數(shù),輸出可能被表示的連續(xù)正整數(shù)的相關(guān)資料,需要的朋友可以參考下2016-03-03
c++實(shí)現(xiàn)簡(jiǎn)單隨機(jī)數(shù)的代碼
在本篇文章里小編給大家整理的是一篇關(guān)于c++實(shí)現(xiàn)簡(jiǎn)單隨機(jī)數(shù)的代碼內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)下。2021-05-05
詳解C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之棧
這篇文章主要為大家介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之棧,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-01-01
windows下vscode環(huán)境c++利用matplotlibcpp繪圖
本文主要介紹了windows下vscode環(huán)境c++利用matplotlibcpp繪圖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
C/C++ 多線程的學(xué)習(xí)心得總結(jié)
本篇文章是對(duì)C/C++中多線程的學(xué)習(xí)心得總結(jié)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05

