欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

QT利用QPainter繪制三維餅狀圖

 更新時間:2022年06月15日 16:19:30   作者:wendy_ya  
這篇文章主要為大家詳細介紹了如何利用QPainter實現(xiàn)三維餅狀圖的繪制,由于Qt中沒有三維餅狀圖的繪制組件,因此只能自行繪制,感興趣的可以動手嘗試一下

一、項目介紹

本文介紹利用QPainter實現(xiàn)三維餅狀圖的繪制,由于Qt中沒有三維餅狀圖的繪制組件,因此只能自行繪制。

二、項目基本配置

新建一個Qt案例,項目名稱為“PieTest”,基類選擇“QWidget”,取消選中創(chuàng)建UI界面復選框,完成項目創(chuàng)建。

三、UI界面設置

無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);
    // 設置反鋸齒
    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);
}

其部分示意為:

五、效果演示

完整效果如下:

到此這篇關于QT利用QPainter繪制三維餅狀圖的文章就介紹到這了,更多相關QT QPainter餅狀圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 深入分析C語言分解質(zhì)因數(shù)的實現(xiàn)方法

    深入分析C語言分解質(zhì)因數(shù)的實現(xiàn)方法

    這篇文章主要介紹了深入分析C語言分解質(zhì)因數(shù)的實現(xiàn)方法,作者結(jié)合了ACM題目作為相關拓展,需要的朋友可以參考下
    2015-08-08
  • C語言數(shù)據(jù)結(jié)構之圖書借閱系統(tǒng)

    C語言數(shù)據(jù)結(jié)構之圖書借閱系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言數(shù)據(jù)結(jié)構之圖書借閱系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++中調(diào)用復制(拷貝)函數(shù)的三種情況總結(jié)

    C++中調(diào)用復制(拷貝)函數(shù)的三種情況總結(jié)

    這篇文章主要介紹了C++中調(diào)用復制(拷貝)函數(shù)的三種情況總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • QT實現(xiàn)多文件拖拽獲取路徑的方法

    QT實現(xiàn)多文件拖拽獲取路徑的方法

    這篇文章主要為大家詳細介紹了QT實現(xiàn)多文件拖拽獲取路徑的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++中新手容易犯的十種編程錯誤匯總

    C++中新手容易犯的十種編程錯誤匯總

    一段C語言代碼,在編譯、鏈接和運行的各個階段都可能會出現(xiàn)問題,下面這篇文章主要給大家介紹了關于C++中新手容易犯的十種編程錯誤的相關資料,需要的朋友可以參考下
    2021-10-10
  • C++之boost::array的用法

    C++之boost::array的用法

    這篇文章主要介紹了C++之boost::array的用法,以實例的形式簡單講述了靜態(tài)數(shù)組的容器boost::array的使用技巧,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-10-10
  • Linux中使用VS Code編譯調(diào)試C++項目詳解

    Linux中使用VS Code編譯調(diào)試C++項目詳解

    最近因為項目的需求,需要在Linux下開發(fā)C++相關項目,經(jīng)過一番摸索最終實現(xiàn)了,下面這篇文章就給大家簡單總結(jié)了一下如何通過VS Code進行編譯調(diào)試的一些注意事項。有需要的朋友們可以參考借鑒,下面來跟著小編一起看看吧。
    2016-12-12
  • 基于c++強制類型轉(zhuǎn)換的(總結(jié))詳解

    基于c++強制類型轉(zhuǎn)換的(總結(jié))詳解

    本篇文章對C++中的強制類型轉(zhuǎn)換進行了詳細的分析介紹。需要的朋友參考下
    2013-05-05
  • 深入理解atoi()與itoa()函數(shù)的用法

    深入理解atoi()與itoa()函數(shù)的用法

    本篇文章是對atoi()與itoa()函數(shù)的用法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C++超細致講解隊列queue的使用

    C++超細致講解隊列queue的使用

    隊列先進先出,即只能在容器的末尾添加新元素,只能從頭部移除元素,下面這篇文章主要給大家介紹了關于C++中隊列queue用法的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05

最新評論