中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

QT如何利用QPainter繪制三維餅狀圖

發布時間:2022-06-16 10:00:06 來源:億速云 閱讀:174 作者:iii 欄目:開發技術

這篇“QT如何利用QPainter繪制三維餅狀圖”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“QT如何利用QPainter繪制三維餅狀圖”文章吧。

    一、項目介紹

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

    二、項目基本配置

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

    三、UI界面設置

    無UI界面

    四、主程序實現

    4.1 widget.h頭文件

    頭文件中只需聲明paintEvent函數:

    private:
        void paintEvent( QPaintEvent* e);

    4.2 widget.cpp源文件

    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繪制三維餅狀圖

    五、效果演示

    完整效果如下:

    QT如何利用QPainter繪制三維餅狀圖

    以上就是關于“QT如何利用QPainter繪制三維餅狀圖”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    吉木乃县| 博湖县| 汤阴县| 荥经县| 千阳县| 大理市| 平江县| 西城区| 湖北省| 嘉义县| 漳平市| 松潘县| 祁连县| 苏尼特左旗| 遵义县| 五原县| 荥阳市| 邓州市| 沁阳市| 保康县| 宁津县| 田东县| 中牟县| 濮阳市| 阿鲁科尔沁旗| 焦作市| 崇义县| 丰城市| 乾安县| 肃南| 喀喇沁旗| 昔阳县| 玉门市| 莱西市| 观塘区| 安远县| 宽城| 绥棱县| 金川县| 江西省| 萨迦县|