最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

QT利用QPainter繪制三維餅狀圖

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

一、項(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ 字符串的反轉(zhuǎn)五種方法實(shí)例

    C++ 字符串的反轉(zhuǎn)五種方法實(shí)例

    通過不同的方法,實(shí)現(xiàn)對(duì)所輸入字符串的反轉(zhuǎn),有需要的朋友可以參考一下
    2013-09-09
  • C++獲取硬件參數(shù)的示例詳解

    C++獲取硬件參數(shù)的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何使用C++獲取硬件參數(shù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • C++中的強(qiáng)制類型轉(zhuǎn)換操作詳解

    C++中的強(qiáng)制類型轉(zhuǎn)換操作詳解

    C++中提供了四種強(qiáng)制類型轉(zhuǎn)換技術(shù):static_cast、dynamic_cast、reinterpret_cast和const_cast。這些技術(shù)能夠在需要時(shí)將一種類型轉(zhuǎn)換為另一種類型,但需要注意它們的適用條件和安全性。程序員需要根據(jù)具體情況選擇合適的強(qiáng)制類型轉(zhuǎn)換方式,以確保程序的正確性和可靠性
    2023-04-04
  • OpenCV實(shí)現(xiàn)摳圖工具

    OpenCV實(shí)現(xiàn)摳圖工具

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)摳圖工具,文中示例代碼介紹的非常詳細(xì),具有一定為大家詳細(xì)的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語言實(shí)現(xiàn)簡(jiǎn)單員工工資管理系統(tǒng)

    C語言實(shí)現(xiàn)簡(jiǎn)單員工工資管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡(jiǎn)單員工工資管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++中volatile關(guān)鍵字的使用詳解以及常見的誤解

    C++中volatile關(guān)鍵字的使用詳解以及常見的誤解

    volatile 關(guān)鍵字是一種類型修飾符,用它聲明的類型變量表示可以被某些編譯器未知的因素更改,比如:操作系統(tǒng),硬件或者其他線程等
    2020-01-01
  • 淺析在C/C++中如何寫調(diào)試宏

    淺析在C/C++中如何寫調(diào)試宏

    這篇文章主要為大家詳細(xì)介紹了在C/C++中如何寫調(diào)試宏的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下
    2024-05-05
  • 淺談C++ 設(shè)計(jì)模式的基本原則

    淺談C++ 設(shè)計(jì)模式的基本原則

    這篇文章主要介紹了++ 設(shè)計(jì)模式的基本原則,主要的目標(biāo)是實(shí)現(xiàn)最終目的,高內(nèi)聚,低耦合,開放封閉原則類的改動(dòng)是通過增加代碼進(jìn)行的,感興趣的小伙伴可參考下面文章的具體內(nèi)容
    2021-09-09
  • 深入解析C中的數(shù)值與真假

    深入解析C中的數(shù)值與真假

    本篇文章是對(duì)C中數(shù)值與真假進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言 數(shù)據(jù)結(jié)構(gòu)中求解迷宮問題實(shí)現(xiàn)方法

    C語言 數(shù)據(jù)結(jié)構(gòu)中求解迷宮問題實(shí)現(xiàn)方法

    這篇文章主要介紹了C語言 數(shù)據(jù)結(jié)構(gòu)中求解迷宮問題實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下
    2017-03-03

最新評(píng)論

鄄城县| 黄石市| 白山市| 成安县| 通州市| 攀枝花市| 温泉县| 岳阳县| 伊通| 鹿泉市| 龙泉市| 景泰县| 休宁县| 济源市| 封丘县| 蓝田县| 镇安县| 达拉特旗| 舞阳县| 乐业县| 眉山市| 房产| 富阳市| 普陀区| 丰宁| 仁怀市| 涟源市| 于都县| 四平市| 民乐县| 平塘县| 常山县| 石柱| 福清市| 敦化市| 邳州市| 南投县| 云阳县| 玉田县| 庐江县| 白水县|