Qt 繪圖詳解

文章目錄

      • 頭文件和構造函數
      • 啟用反鋸齒功能
      • 繪制矩形
      • 繪制圓角矩形
      • 繪制橢圓
      • 繪制圓弧
      • 繪制弦
      • 繪制凸多邊形
      • 繪制圖片
      • 繪制直線
      • 繪制多條直線
      • 繪制多點連接的線
      • 繪制路徑
      • 繪制扇形
      • 繪制點
      • 繪制文本
      • 擦除矩形區域
      • 填充矩形
      • 填充路徑

頭文件和構造函數

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPainter>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}

啟用反鋸齒功能

首先,我們在每個圖形的繪制過程中啟用反鋸齒功能,以保證繪制效果的平滑。

void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);painter.setRenderHint(QPainter::TextAntialiasing);// 以下為具體圖形的繪制代碼
}

繪制矩形

void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);// 畫筆樣式pen.setCapStyle(Qt::FlatCap); // 線端點樣式pen.setJoinStyle(Qt::BevelJoin); // 線連接點樣式// 給畫家設置畫筆painter.setPen(pen);// 設置畫刷QBrush brush;brush.setColor(Qt::yellow);brush.setStyle(Qt::SolidPattern);// 給畫家設置畫刷painter.setBrush(brush);// 繪制矩形QRect rect(60, 60, 400, 400);painter.drawRect(rect);
}

解釋:

  • QPen 用于設置畫筆的寬度、顏色、線端點樣式和連接點樣式。
  • QBrush 用于設置填充顏色和樣式。
  • QRect 定義了矩形的尺寸和位置。
  • painter.drawRect(rect) 使用指定的畫筆和畫刷繪制矩形。

繪制圓角矩形

void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 設置畫刷QBrush brush;brush.setColor(Qt::yellow);brush.setStyle(Qt::SolidPattern);painter.setBrush(brush);// 繪制圓角矩形QRect roundedRect(20, 20, 400, 300);painter.drawRoundedRect(roundedRect, 20, 20);
}

解釋:

  • painter.drawRoundedRect 繪制帶圓角的矩形。
  • 20, 20 指定了圓角的水平和垂直半徑。

繪制橢圓

void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 設置畫刷QBrush brush;brush.setColor(Qt::yellow);brush.setStyle(Qt::SolidPattern);painter.setBrush(brush);// 繪制橢圓QRect ellipseRect(20, 20, 400, 300);painter.drawEllipse(ellipseRect);
}

解釋:

  • painter.drawEllipse 使用指定的矩形邊界繪制橢圓。

繪制圓弧

void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 繪制圓弧QRect arcRect(20, 20, 400, 400);// 起始角和伸縮角必須以1/16度指定,即一個完整的圓等于5760(16 * 360)。// 角度的正值表示逆時針方向,負值表示順時針方向// 零度在3點鐘方向(參考手表的位置)painter.drawArc(arcRect, 0 * 16, 90 * 16);
}

解釋:

  • painter.drawArc 繪制圓弧。
  • 0 * 1690 * 16 分別表示起始角度和跨越角度,單位為1/16度。

繪制弦

void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 繪制弦QRect chordRect(20, 20, 400, 400);painter.drawChord(chordRect, 0 * 16, 120 * 16);
}

解釋:

  • painter.drawChord 繪制弦,弦是一個連接圓弧兩個端點的線段。

繪制凸多邊形

void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 繪制凸多邊形QPoint convexPoints[4] = {{50, 100},{100, 50},{500, 160},{110, 400}};painter.drawConvexPolygon(convexPoints, 4);
}

解釋:

  • painter.drawConvexPolygon 繪制凸多邊形。
  • QPoint 數組定義了多邊形的頂點。

繪制圖片

void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 繪制圖片QRect imageRect(10, 10, 400, 300);QImage image(":/JINGMAO.jpg");painter.drawImage(imageRect, image);
}

解釋:

  • painter.drawImage 在指定的矩形區域內繪制圖片。

繪制直線

void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 繪制直線QLine line(50, 50, 400, 400);painter.drawLine(line);
}

解釋:

  • QLine 定義了直線的起點和終點。
  • painter.drawLine 繪制直線。

繪制多條直線

void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 繪制多條直線QRect rect(50, 50, 400, 300);QVector<QLine> lines;lines.append(QLine(rect.topLeft(), rect.topRight()));lines.append(QLine(rect.bottomLeft(), rect.topRight()));lines.append(QLine(rect.topLeft(), rect.bottomRight()));painter.drawLines(lines);
}

解釋:

  • QVector<QLine> 用于存儲多條直線。
  • painter.drawLines 繪制多條直線。

繪制多點連接的線

void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 繪制多點連接的線QPoint points[5] = {{50, 100},{100, 50},{500, 160},{200, 200},{110, 400}};painter.drawPolyline(points, 5);
}

解釋:

  • QPoint 數組定義了

多點連接的線的頂點。

  • painter.drawPolyline 繪制多點連接的線。

繪制路徑

void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 繪制路徑QRect rect(50, 50, 400, 300);QPainterPath path;path.addEllipse(rect);path.addRect(rect);painter.drawPath(path);
}

解釋:

  • QPainterPath 用于定義復雜的路徑。
  • painter.drawPath 繪制由 QPainterPath 對象定義的路徑。

繪制扇形

void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 繪制扇形QRect rect(50, 50, 400, 300);painter.drawPie(rect, 0 * 16, 120 * 16); // 0 度是 3 點鐘方向
}

解釋:

  • painter.drawPie 繪制扇形。

繪制點

void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 繪制單個點painter.drawPoint(QPoint(100, 200));// 繪制多個點QPoint points[4] = {{50, 100},{100, 50},{500, 160},{110, 400}};painter.drawPoints(points, 4);
}

解釋:

  • painter.drawPoint 繪制單個點。
  • painter.drawPoints 繪制多個點。

繪制文本

void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 設置字體QFont font;font.setFamily("微軟雅黑");font.setPointSize(30);font.setBold(true);painter.setFont(font);// 繪制文本QRect rect(100, 100, 400, 200);painter.drawText(rect, "劉琴小寶貝");
}

解釋:

  • QFont 設置字體屬性。
  • painter.drawText 在指定的矩形區域內繪制文本。

擦除矩形區域

void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 繪制圖片QRect rect(10, 10, 400, 300);QImage image(":/JINGMAO.jpg");painter.drawImage(rect, image);// 設置窗口背景色setPalette(QPalette(Qt::red));// 擦除矩形區域QRect rect2(100, 100, 200, 100);painter.eraseRect(rect2);
}

解釋:

  • painter.eraseRect 擦除指定的矩形區域內容。

填充矩形

void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 填充矩形QRect rect(10, 10, 400, 300);painter.fillRect(rect, Qt::blue);
}

解釋:

  • painter.fillRect 使用指定的顏色填充矩形區域。

填充路徑

void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 定義路徑并填充QRect rect(10, 10, 400, 300);QPainterPath path;path.addRect(rect);path.addEllipse(rect);painter.fillPath(path, Qt::blue);
}

解釋:

  • QPainterPath 用于定義復雜的路徑。
  • painter.fillPath 使用指定的顏色填充路徑。

通過以上這些代碼示例和詳細解釋,相信你已經掌握了在Qt中進行各種圖形繪制的方法。Qt的繪圖功能非常強大,能夠滿足各種復雜的繪圖需求。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/42425.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42425.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42425.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C-11 三角剖分的調研

C-11 三角剖分算法 三角剖分就是將輸入的多邊形&#xff0c;分割成一系列互不重疊的三角形&#xff0c;其重要性就在這不多贅述。這個是一個別人總結的鏈接&#xff1a;http://vterrain.org/Implementation/Libs/triangulate.html 圖片鏈接&#xff1a;http://www-cgrl.cs.m…

基于CentOS Stream 9平臺搭建MinIO以及開機自啟

1. 官網 https://min.io/download?licenseagpl&platformlinux 1.1 下載二進制包 指定目錄下載 cd /opt/coisini/ wget https://dl.min.io/server/minio/release/linux-amd64/minio1.2 文件賦權 chmod x /opt/coisini/minio1.3 創建Minio存儲數據目錄&#xff1a; mkdi…

springboot校園安全通事件報告小程序-計算機畢業設計源碼02445

Springboot 校園安全通事件報告小程序系統 摘 要 隨著中國經濟的飛速增長&#xff0c;消費者的智能化水平不斷提高&#xff0c;許多智能手機和相關的軟件正在得到更多的關注和支持。其中&#xff0c;校園安全通事件報告小程序系統更是深得消費者的喜愛&#xff0c;它的出現極大…

關于隱藏、覆蓋(重寫)、重載的理解

定義區分 在派生-對象中&#xff1a;優先考慮隱藏&#xff0c;此時派生類中的覆蓋(重寫)也是隱藏;沒有隱藏的情況下&#xff0c;子類對象才能調用父類重載函數。[此時感覺virtual沒用&#xff0c;]在派生-指針或者引用中&#xff1a;只用覆蓋(重寫)和重載; 注&#xff1a;C Pr…

《Programming from the Ground Up》閱讀筆記:p19-p48

《Programming from the Ground Up》學習第2天&#xff0c;p19-p48總結&#xff0c;總計30頁。 一、技術總結 1.object file p20, An object file is code that is in the machine’s language, but has not been completely put together。 之前在很多地方都看到object fi…

高階K8S面試題你會幾個?

前言 K8S架構、公有云、持久化存儲、HELM、CICD、負載均衡、監控告警、可觀察性、服務治理、架構探索。。。 Q1&#xff1a;如何調試 Kubernetes 集群中的網絡連接問題&#xff0c;比如 Pod 間通信失敗的情況&#xff1f; 狀態檢查&#xff1a;使用 kubectl get pods 和 kube…

MySQL-17-mysql alter 語句如何實現?如何合并為一個

拓展閱讀 MySQL 00 View MySQL 01 Ruler mysql 日常開發規范 MySQL 02 truncate table 與 delete 清空表的區別和坑 MySQL 03 Expression 1 of ORDER BY clause is not in SELECT list,references column MySQL 04 EMOJI 表情與 UTF8MB4 的故事 MySQL 05 MySQL入門教程&a…

Git使用中遇到的問題(隨時更新)

問題1.先創建本地庫&#xff0c;后拉取遠程倉庫時上傳失敗的問題怎么解決&#xff1f; 操作主要步驟&#xff1a; step1 設置遠程倉庫地址: $ git remote add origin gitgitee.com:yourAccount/reponamexxx.git step2 推送到遠程倉庫: $ git push -u origin "master&qu…

線程池理解及7個參數

定義理解 線程池其實是一種池化的技術實現&#xff0c;池化技術的核心思想就是實現資源的復用&#xff0c;避免資源的重復創建和銷毀帶來的性能開銷。線程池可以管理一堆線程&#xff0c;讓線程執行完任務之后不進行銷毀&#xff0c;而是繼續去處理其它線程已經提交的任務。 …

GStreamer學習5----probe數據探測

參考資料&#xff1a; gstreamer中如何使用probe&#xff08;探針&#xff09;獲取幀數據_gstreamer 視頻編碼時獲取視頻關鍵幀信息-CSDN博客 Gstreamer中可以使用AppSink作為一個分支來查看管線中的數據&#xff0c;還可以使用probe去處理。 在GStreamer中&#xff0c;probe…

LayerNorm Plugin的使用與說明

目錄 前言0. 簡述1. Layernorm Plugin的使用1.1 源碼下載1.2 模型下載和修改1.3 環境配置1.4 編譯1.4 engine生成和執行(trtexec)1.5 enging生成和執行(C API) 2. 補充說明2.1 RTMO顯存占用問題2.2 插件找不到的說明2.3 LayerNorm plugin封裝的嘗試2.4 layerNorm plugin核函數實…

拉曼光譜入門:3.拉曼光譜的特征參數與定量定性分析策略

1.特征參數 1.1 退偏振率 退偏振率&#xff08;p&#xff09;是一個衡量拉曼散射光偏振狀態的參數&#xff0c;它描述了拉曼散射光的偏振方向與入射光偏振方向之間的關系。退偏振率定義為垂直偏振方向的拉曼散射強度與平行偏振方向的拉曼散射強度之比。退偏振率&#xff08;p&…

禁用windows的語音識別快捷鍵win+ctrl+s

win11組合鍵winctrls會彈出語音識別提示&#xff0c;即使到設置里禁用了語音識別也沒用 解決辦法&#xff1a;安裝PowerToys&#xff0c;通過“鍵盤管理器”-“重新映射快捷鍵”禁用 PowerToys是微軟自己的工具&#xff0c;不用擔心安全問題&#xff0c;下載地址&#xff1a;h…

系統設計題-簡易數據庫系統

一、設計一個簡易數據庫系統&#xff0c;包含create&#xff0c;insert&#xff0c;select三個指令。 create(int tableId,int colNum,String key)&#xff1a;創建表&#xff0c;其id為tableId&#xff0c;如果該表已存在&#xff0c;則不做任何處理。colNum為表中列的數量&a…

洛谷 P3008 [USACO11JAN] Roads and Planes G

題意 有一張 n n n 點 ( m 1 m 2 ) (m_1m_2) (m1?m2?) 邊的無向圖&#xff0c;其中 m 1 m_1 m1? 條為無向邊&#xff0c;另外 m 2 m_2 m2? 條為有向邊&#xff0c; 無向邊的邊權可以為負。求 s s s 到其他每個點的最短路。 思路 使用 SPFA 會 T 掉一兩個點&#x…

第10章:網絡與信息安全

目錄 第10章&#xff1a;網絡與信息安全 網絡概述 計算機網絡概念 計算機網絡的分類 網絡的拓撲結構 ISO/OSI網絡體系結構 網絡互聯硬件 物理層互聯設備 數據鏈路層互聯設備 網絡層互聯設備 應用層互聯設備 網絡的協議與標準 網絡標準 TCP/IP協議族 網絡接口層協…

GCC擴展功能、函數,預處理命令

文章目錄 前言一、GCC C語言擴展聲明函數屬性變量屬性內斂匯編與原子操作相關的內建函數內存模型感知原子操作的內置函數使用溢出檢查執行算術的內置函數 - xxx 二、GCC C語言擴展interface和 pragmasTemplate 二、預處理過程及其指令預處理過程1. 字符集轉換2. Initial proces…

實現基于Spring Cloud的事件驅動微服務

實現基于Spring Cloud的事件驅動微服務 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 事件驅動架構在現代微服務架構中越來越受歡迎&#xff0c;它通過事件的…

【JAVA多線程】線程池概論

目錄 1.概述 2.ThreadPoolExector 2.1.參數 2.2.新任務提交流程 2.3.拒絕策略 2.4.代碼示例 1.概述 線程池的核心&#xff1a; 線程池的實現原理是個標準的生產消費者模型&#xff0c;調用方不停向線程池中寫數據&#xff0c;線程池中的線程組不停從隊列中取任務。 實現…

最新版Python安裝教程

一、安裝Python 1.下載Python 訪問Python官網&#xff1a; https:/www.oython.orgl 點擊downloads按鈕&#xff0c;在下拉框中選擇系統類型(windows/Mac OS./Linux等) 選擇下載最新穩定版本的Python 以下內容以演示安裝Windows操作系統64位的python 左邊是穩定發布版本Stabl…