日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt--基础图形绘制

發布時間:2023/12/18 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt--基础图形绘制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.基礎圖形繪制

A.Qt圖形系統中的關鍵角色
QPainter--Qt中的畫家,能夠繪制各種基礎圖形 ,擁有繪圖所需的畫筆、畫刷、字體
QPaintDevice--Qt中的畫布,畫家的繪圖板,所有的QWidget類都繼承自QPaintDevice
Qt圖形系統中的關鍵角色

Qt中所使用的工具
1.QPen-用于繪制幾何圖形的邊緣,由顏色、寬度、線風格等參數組成
2.QBrush-用于填充幾何圖形的調色板,由顏色和填充風格組成
3.QFont-用于文本繪制,由字體屬性組成

需要注意的是--只能在QWidget::paintEvent中繪制圖形

B.Qt圖形系統中的坐標系
1.物理坐標系--原點(0,0)在左上角的位置,單位是像素并且X坐標向右增長,Y坐標向下增長
2.邏輯坐標系--數學模型中的抽象坐標系,單位由具體問題決定,坐標軸的增長方向由具體問題決定
我們需要注意的是QPainter使用邏輯坐標系繪制圖形,邏輯坐標系中圖形的大小和位置經由轉換后繪制于具體設備,且在默認情況下的邏輯坐標與物理坐標系完全一致
C.視口與窗口
1.視口--物理坐標系中一個任意指定的矩形
2.窗口--邏輯坐標系下對應到物理坐標系中的相同矩形
深入理解視口與窗口
1.視口與窗口是不同坐標系中的同一個矩形
2.視口與窗口中的坐標點存在一一映射的關系
3.視口與窗口能夠通過坐標轉換而相互轉換

視口與窗口的變換方法
1.定義視口--左上角坐標,右下角坐標,計算寬度和高度
2.定義窗口--左上角坐標,右下角坐標,計算寬度和高度
代碼示例

Widget.cpp #include "Widget.h" #include <QPainter> #include <QPointF> #include <QPen> #include <qmath.h>Widget::Widget(QWidget *parent): QWidget(parent) { }void Widget::paintEvent(QPaintEvent *) {//繪圖工具的基本設置QPainter painter(this);QPen pen;pen.setColor(Qt::green);pen.setStyle(Qt::SolidLine);pen.setWidthF(0.01);painter.setPen(pen);painter.setViewport(50, 50, width()-100, height()-100);//視圖painter.setWindow(-10, 2, 20, -4); //窗口painter.fillRect(-10, 2, 20, -4, Qt::black);painter.drawLine(QPointF(-10, 0), QPointF(10, 0)); // xpainter.drawLine(QPointF(0, 2), QPointF(0, -2)); // yfor(float x=-10; x<10; x+=0.01){float y = qSin(x);painter.drawPoint(QPointF(x, y));}}Widget::~Widget() {}

運行結果如圖所示

C.實例實現--簡單的繪圖程序
我們需要的功能--自由的繪制圖形,并且能夠選擇圖形繪制顏色
a.界面的選擇
1.以QWidget為基類創建繪圖主窗口
2.使用QGroupBox創建圖形設置區域
3.使用單選QRadioBox實現目標圖形的選擇
4.使用組合框QCombox實現繪圖顏色的選擇
b.自由繪圖的主要實現
1.以鼠標按下為開始,記錄開始坐標--mousePressEvent
2.記錄鼠標移動時經過的像素坐標--mouseMoveEvent
3.以鼠標釋放為結束,記錄坐標--mouseReleaseEvent
4.按照記錄順序在兩兩坐標之間繪制直線--painEevent
c.基礎圖形的繪制與自由繪圖類似
1.以鼠標按下為開始,記錄開始坐標--mousePressEvent
2.將鼠標移動時經過的每個坐標作為臨時結束坐標--mouseMoveEvent
3.以鼠標釋放為結束,確定最終結束坐標--mouseReleaseEvent
4.在開始坐標和結束坐標之間繪制目標圖形--painEevent
實現的程序運行圖如下

?

QPainter類用法

本文主要總結QPainter類的用法,主要以代碼和注釋講解為主。通過講解兩個例子來熟悉QPainter類的用法。第一個例子是用兩個點繪制一條線段,用畫筆和畫刷繪制一個紅色邊框矩形,矩形里面填充綠色。第二個例子是繪制矩形表格和弧線點畫線,具體的步驟如下所述:

?

一、新建一個widget工程,基類為QWidget,在Widget.h頭文件中,添加入下代碼:

?

二、在widget.cpp源文件中,添加如下代碼:

?

三、構建運行后的結果如下圖所示:

兩點(0,0)(200,100)繪制一條線段

?

添加畫筆和畫刷繪制一個紅色邊框矩形,里面填充綠色

?

四、繪制矩形表格和弧線

將第二部門的void Widget::paintEvent(QPaintEvent *QPaintEvent)函數里面的內容全部刪除,改寫成如下圖所示代碼:

?

五、程序構建和運行后,執行結果如下圖所示:

矩形表格

?

弧線(左上角)

重寫mainwindows繪圖事件在mainwindows中繪制簡單一條直線

總結

以上是生活随笔為你收集整理的Qt--基础图形绘制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。