QT利用QPainter繪制三維餅狀圖
一、項(xiàng)目介紹
本文介紹利用QPainter實(shí)現(xiàn)三維餅狀圖的繪制,由于Qt中沒有三維餅狀圖的繪制組件,因此只能自行繪制。
二、項(xiàng)目基本配置
新建一個(gè)Qt案例,項(xiàng)目名稱為“PieTest”,基類選擇“QWidget”,取消選中創(chuàng)建UI界面復(fù)選框,完成項(xiàng)目創(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); // 扇形的弦與弧的交點(diǎn) 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); // 求交點(diǎn)的坐標(biāo)值 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; // 記錄交點(diǎn) 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語言分解質(zhì)因數(shù)的實(shí)現(xiàn)方法
這篇文章主要介紹了深入分析C語言分解質(zhì)因數(shù)的實(shí)現(xiàn)方法,作者結(jié)合了ACM題目作為相關(guān)拓展,需要的朋友可以參考下2015-08-08C語言數(shù)據(jù)結(jié)構(gòu)之圖書借閱系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言數(shù)據(jù)結(jié)構(gòu)之圖書借閱系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03C++中調(diào)用復(fù)制(拷貝)函數(shù)的三種情況總結(jié)
這篇文章主要介紹了C++中調(diào)用復(fù)制(拷貝)函數(shù)的三種情況總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11Linux中使用VS Code編譯調(diào)試C++項(xiàng)目詳解
最近因?yàn)轫?xiàng)目的需求,需要在Linux下開發(fā)C++相關(guān)項(xiàng)目,經(jīng)過一番摸索最終實(shí)現(xiàn)了,下面這篇文章就給大家簡單總結(jié)了一下如何通過VS Code進(jìn)行編譯調(diào)試的一些注意事項(xiàng)。有需要的朋友們可以參考借鑒,下面來跟著小編一起看看吧。2016-12-12基于c++強(qiáng)制類型轉(zhuǎn)換的(總結(jié))詳解
本篇文章對(duì)C++中的強(qiáng)制類型轉(zhuǎn)換進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下2013-05-05