QT利用QPainter繪制三維餅狀圖
一、項目介紹
本文介紹利用QPainter實現(xiàn)三維餅狀圖的繪制,由于Qt中沒有三維餅狀圖的繪制組件,因此只能自行繪制。
二、項目基本配置
新建一個Qt案例,項目名稱為“PieTest”,基類選擇“QWidget”,取消選中創(chuàng)建UI界面復(fù)選框,完成項目創(chuàng)建。
三、UI界面設(shè)置
無UI界面
四、主程序?qū)崿F(xiàn)
4.1 widget.h頭文件
頭文件中只需聲明paintEvent函數(shù):
private:
void paintEvent( QPaintEvent* e);
4.2 widget.cpp源文件
paintEvent函數(shù)定義如下:
void Widget::paintEvent( QPaintEvent* e)
{
int start=240;//定義起始角度
int ang=30;//定義角度范圍
QPainter painter(this);
// 去除畫筆
painter.setPen(Qt::NoPen);
// 設(shè)置反鋸齒
painter.setRenderHint(QPainter::Antialiasing);
//三維餅狀圖
// 頂層圓面
QRectF rect_top(10.0, 20.0, 280.0, 160.0);
// 底層圓面(寬高相同,y在頂層圓面下方40處)
QRectF rect_bottom(10.0, 60.0, 280.0, 160.0);
// 中間矩形
QRectF rect_midd(10.0, 100.0, 280.0, 40.0);
// 扇形起始角度
int startAngle = start * 16; //從230度
// 扇形覆蓋范圍
int spanAngle = ang * 16;
painter.setBrush(QColor(97,35,35,255));//餅狀圖高度顏色
// 繪制底層圓面
painter.drawEllipse(rect_bottom);
// 繪制中間矩形
painter.drawRect(rect_midd);
painter.setBrush(QColor(Qt::darkYellow));//餅狀圖占比高度顏色
// 繪制底層扇形
painter.drawPie(rect_bottom, startAngle, spanAngle);
// 扇形的弦與弧的交點
double pi = 3.1415926;
double dx1 = rect_top.width() * 0.5 * cos(start * pi / 180);
double dy1 = rect_top.height() * 0.5 * sin(start * pi / 180);
double dx2 = rect_top.width() * 0.5 * cos((start+ang) * pi / 180);
double dy2 = rect_top.height() * 0.5 * sin((start+ang) * pi / 180);
// 求交點的坐標值
QPointF posBackCenter = QPointF(rect_top.center());
double dX1 = posBackCenter.x() + dx1 + 0.5;
double dY1 = posBackCenter.y() - dy1 + 0.5;
double dX2 = posBackCenter.x() + dx2 + 0.5;
double dY2 = posBackCenter.y() - dy2 + 0.5;
// 記錄交點
QPointF topLeft = QPointF(dX1, dY1);
QPointF bottomRight = QPointF(dX2, dY2) + QPointF(0,40);
QPointF bottomLeft = topLeft + QPointF(0,40);
painter.setBrush(QColor(Qt::darkYellow));
// 繪制連接扇形的區(qū)域
QPolygonF path;
path << topLeft << QPointF(dX2,dY2) << bottomRight << bottomLeft;
painter.drawPolygon(path);
// 繪制頂層圓面
painter.setBrush(QColor(156,56,56,255));
painter.drawEllipse(rect_top);
// 繪制頂層扇形
painter.setBrush(QColor(Qt::yellow));
painter.drawPie(rect_top, startAngle, spanAngle);
QWidget::paintEvent(e);
}其部分示意為:

五、效果演示
完整效果如下:

到此這篇關(guān)于QT利用QPainter繪制三維餅狀圖的文章就介紹到這了,更多相關(guān)QT QPainter餅狀圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++中volatile關(guān)鍵字的使用詳解以及常見的誤解
volatile 關(guān)鍵字是一種類型修飾符,用它聲明的類型變量表示可以被某些編譯器未知的因素更改,比如:操作系統(tǒng),硬件或者其他線程等2020-01-01
C語言 數(shù)據(jù)結(jié)構(gòu)中求解迷宮問題實現(xiàn)方法
這篇文章主要介紹了C語言 數(shù)據(jù)結(jié)構(gòu)中求解迷宮問題實現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下2017-03-03

