您好,登錄后才能下訂單哦!
這篇“QT如何利用QPainter繪制三維餅狀圖”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“QT如何利用QPainter繪制三維餅狀圖”文章吧。
本文介紹利用QPainter實現三維餅狀圖的繪制,由于Qt中沒有三維餅狀圖的繪制組件,因此只能自行繪制。
新建一個Qt案例,項目名稱為“PieTest”,基類選擇“QWidget”,取消選中創建UI界面復選框,完成項目創建。
無UI界面
頭文件中只需聲明paintEvent函數:
private: void paintEvent( QPaintEvent* e);
paintEvent函數定義如下:
void Widget::paintEvent( QPaintEvent* e) { int start=240;//定義起始角度 int ang=30;//定義角度范圍 QPainter painter(this); // 去除畫筆 painter.setPen(Qt::NoPen); // 設置反鋸齒 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)); // 繪制連接扇形的區域 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); }
其部分示意為:
完整效果如下:
以上就是關于“QT如何利用QPainter繪制三維餅狀圖”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。