1. 程式人生 > >QT QPainter用法(包含畫點,畫圓,畫矩形,畫線等)

QT QPainter用法(包含畫點,畫圓,畫矩形,畫線等)

       QPainter可以繪製從簡單的直線到像餅圖和絃這樣的複雜形狀。它也可以繪製排列的文字和畫素對映。通常,它在一個“自然的”座標系統中繪製,但是它也可以在視和世界轉換中做到這些。

繪圖工具的典型用法是:

  • 構造一個繪圖工具。
  • 設定畫筆、畫刷等等。
  • 繪製。
  • 銷燬這個繪圖工具。

下面就QPainter的使用做下面的做以下例子以倍後用

1、main.cpp不做任何修改

2、widget.h修改如下

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPainter>
#include <QPen>
namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT
    
public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
public:
     void paintEvent(QPaintEvent *);
    
private:
    Ui::Widget *ui;
};

#endif // WIDGET_H
3、widget.cpp新增以下程式碼

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}
void Widget::paintEvent(QPaintEvent *)
{
    QPen pen;
    //1、畫字
    QPainter painter(this);
    //painter.setPen(Qt::blue);
    painter.setPen(Qt::blue);
    painter.setFont(QFont("Arial", 50));
    painter.drawText(rect(), Qt::AlignCenter, "Qt");
    //2、畫多邊形
    QRectF rectangle(100.0, 20.0, 80.0, 60.0);
    int startAngle = 30 * 16;
    int spanAngle = 120 * 16;

    painter.drawArc(rectangle, startAngle, spanAngle);

    static const QPointF points[4] = {
        QPointF(10.0, 80.0),
        QPointF(20.0, 10.0),
        QPointF(80.0, 30.0),
        QPointF(90.0, 70.0)
    };
    painter.drawConvexPolygon(points, 4);
    //3、畫圓
    QRectF rectangle1(10.0, 100.0, 80.0, 80.0);
    //QPainter painter(this);
    painter.drawEllipse(rectangle1);
    //4、畫線
    QLineF line(10.0, 80.0, 90.0, 20.0);
    //QPainter(this);
    painter.drawLine(line);
    //5、畫
    static const QPointF points1[3] = {
        QPointF(110.0, 180.0),
        QPointF(120.0, 110.0),
        QPointF(180.0, 130.0),
    };
    painter.drawPolyline(points1, 3);
    //6、畫矩形
    painter.setPen(Qt::red);
    QRectF rectangle2(200.0, 20.0, 80.0, 60.0);
    painter.drawRect(rectangle2);
    //7、畫圓角矩形
    QRectF rectangle3(200.0, 120.0, 80.0, 60.0);
    painter.drawRoundedRect(rectangle3, 20.0, 15.0);
    //8、畫多個點
    QPointF pointf[10];
    pen.setWidth(6);
    painter.setPen(pen); // 設定畫筆
    for (int i=0; i<10; ++i)
    {
        pointf[i].setX(2.0+i*10.0);
        pointf[i].setY(130.0);
    }
    painter.drawPoints(pointf, 10);
    //9、畫單個直線
    pen.setWidth(5);
    pen.setColor(Qt::red); // 設定畫筆為黃色
    painter.setPen(pen); // 設定畫筆
    painter.drawLine(rect().topLeft(), rect().bottomRight());
    //10、畫點
    pen.setWidth(6);
    pen.setColor(Qt::green); // 設定畫筆為黃色
    painter.setPen(pen); // 設定畫筆
    painter.drawPoint(200,200);
    //11、畫圓點
    painter.setPen(QColor(Qt::blue));
    painter.setBrush(QBrush(Qt::yellow));
    painter.drawEllipse(50,150,15,15);
}

3、執行結果如下所示


相關推薦

QT QPainter用法包含矩形

       QPainter可以繪製從簡單的直線到像餅圖和絃這樣的複雜形狀。它也可以繪製排列的文字和畫素對映。通常,它在一個“自然的”座標系統中繪製,但是它也可以在視和世界轉換中做到這些。繪圖工具的典型用法是:構造一個繪圖工具。設定畫筆、畫刷等等。繪製。銷燬這個繪圖工具。下

MATLAB中scatter函式的用法繪製散

標記輪廓顏色,指定為 'flat'、RGB 三元數或表中列出的顏色選項之一。預設值 'flat' 將使用 CData 屬性中的顏色。如果想自定義顏色,請指定一個 RGB 三元數。RGB 三元數是包含三個元素的行向量,其元素分別指定顏色中紅、綠、藍分量的強度。強度值必須位於 [0,1] 範圍內,例如 [0.4

利用Freemarker生成doc檔案包含list迴圈ifelse判斷合併單元格嵌入表格單元格字數過多報錯

1、利用office等軟體開啟doc文件,另存為word2003xml形式的檔案。 2、修改xml中的需要動態生成的值,Freemarker變數為${data}格式的,修改完改成ftl字尾,複製到載入

軟考之網路管理員包含2004-2018歷年真題詳解+課本教材講義+視訊教程

軟考-網路管理員2004-2018歷年考試真題以及詳細答案(試題和答案分離的哦),同時含有最新課本教材、複習筆記、網路管理員視訊教程。持續更新後續年份的資料。請點贊!!請點贊!!!絕對全部貨真價實的資料!!! 全網最全,獨此一家,費心整理,希望各位同學順利通過考試!!! 網路管理員歷

css基本用法層疊、群選擇符、派生選擇符、顏色值

CSS 選擇符【總結】(1)  div{...}(2)  .myStyle1{...} , 對應HTML引用:< p class=myStyle1>歡迎使用ASP.NET2.0技術< /p > (3) #myStyle2{...} , 對應HTML引

notepad++ 查找引用(Find Reference)適用於c c++及各類腳本比如lua、python

onf 後綴名 ces ram 找不到 進行 align ins studio 在程序開發過程中,程序員經常用到的一個功能就是查找引用(Find Reference),Visual Studio裏面的對應功能是“查找所有引用”(Find All Re

Vue.js常用指令匯總v-if//v-show//v-else//v-for//v-bind//v-on

ont ner 技術分享 數組 div 區別 art space alt 有時候指令太多會造成記錯、記混的問題,所以本文在記憶的時候會采用穿插記憶的方式,交叉比對,不易出錯。 本文主要講了一下六個指令: v-if//v-show//v-else//v-for//v-bi

正則表示式詳解貪婪與懶惰、前瞻與後顧、後向引用

之前嫌正則麻煩,一直沒有深入去了解過正則,能不用的地方就不使用。 最近專案中遇到了不可避免的正則使用,所以花了點時間去了解並整理了一下,理解不一定完全準確,如有不對歡迎指出,希望對大家有所幫助。 一、名詞解釋 首先我們瞭解幾個名詞:元字元 、 普通字元、列印字元、非列印字元、 限定符 、定位符、非列

Java將資料按列寫入Excel並設定格式字型、背景色、自動列寬、對齊方式

本文使用jxl.jar工具類庫將資料按列寫入Excel並設定格式(字型、背景色、自動列寬、對齊方式等)。 /** * 按列寫入Excel並設定格式 * * @param outputUrl * 輸出路徑 * @par

2018面試總結阿里巴巴螞蟻金服、餓了麼、人人車

前言 今年跳槽換工作,一共面試了8家公司,拿到了6個offer,其中包括阿里巴巴螞蟻金服(外派杭州)、餓了麼、人人車等公司,總體來說還算是順利,因為也沒面的特別多,想把今年的面試情況總結一下,給自己做一個記錄,也希望給其他人一點幫助。 面試記錄 星雲鏈

[MySQL] 行列轉換變化各種方法實現總結行變列報表統計、列變行資料記錄統計

前言:mysql行列變化,最難的就是將多個列變成多行,使用的比較多的是統計學中行變列,列變行,沒有找到現成的函式或者語句,所以自己寫了儲存過程,使用動態sql來實現,應用業務場景,使用者每個月都有使用記錄數錄入一張表,一個月一個欄位,所以表的欄位是動態增長的,現在需要實時統計

CSS:字型樣式字體系列、大小、加粗、風格、變形

CSS 字型屬性定義文字的(如斜體)和變形(如小型大寫字母) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml

Python基礎7——名片管理系統實現了資料簡單的儲存、修改、刪除、檢視

進行了一些Python基礎知識的學習後,將這些知識進行綜合,實現了名片管理小系統,可以進行資料的增刪改查。 主要思路是將名片(資訊)存進字典裡,再將字典存入列表裡,方便進行增刪改查。 程式碼如下: #-*-encoding:utf-8-*- #用來儲存名片 card_in

Flutter Decoration背景設定邊框、圓角、陰影、形狀、漸變、背景影象

1 繼續關係: BoxDecoration:實現邊框、圓角、陰影、形狀、漸變、背景影象 ShapeDecoration:實現四個邊分別指定顏色和寬度、底部線、矩形邊色、圓形邊色、體育場(豎向橢圓)、 角形(八邊角)邊色 FlutterLogoDecoration:實

一種動態寫入apk數據的方法用於用戶關系綁定、添加渠道號

val 遇到的問題 sig 無法 暫時 lac exception 每一個 tof 背景: 正在開發的APP需要記錄業務員與客戶的綁定關系。具體應用場景如下: 由流程圖可知,並沒有用戶填寫業務人員信息這一步,因此在用戶下載的APP中就已經攜帶了業務人員的信息。 由

利用QTQpainter直線弧線簡單圖形

轉自: http://blog.sina.com.cn/s/blog_67cf08270100wv59.html MyImgTest.h: #ifndef MYIMGTEST_H #define MYIMGTEST_H   #include <QWidget

擊添加或減少數量總價隨之改變keyup的用法

開始 htm max ges 減少 cal enter ota lac <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>點擊添

QT QTableView用法小結設定單元格字型顏色文字字型...

這幾天在公司做關於衰減開關的上位機,用到很多表格,其中表格基本上都是用QTableView進行編寫。為了防止以後忘記,同時也給後續的同學一點學習建議,特此寫下這篇部落格。 QTableView常用於實現資料的表格顯示。下面我們如何按步驟實現學生資訊表格:一 新增表頭

ROS知識16----如何編譯時自動鏈接同一個工作空間的其他包的頭文件包含messagesrvaction自動生成的頭文件

logs package fin 空間 依賴庫 osc div build 知識 catkin_make編譯時,往往需要自動鏈接同一個工作空間的其他包的頭文件。否則會出現類似如下的錯誤: /home/xx/xx_ws/srcA_package/src/db.hpp:13:

qt下的時鐘程序簡單美麗繼承自QWidget的Clock用timer調用update刷新然後使用paintEvent作畫就行了超詳細中文註釋good

循環 連接 定位 根據 定時器 img cal widget tran 最近抽空又看了下qt,發現用它來實現一些東西真的很容易比如下面這個例子,繪制了個圓形的時鐘,但代碼卻清晰易懂[例子源自奇趣科技提供的例子]因為清晰,所以就只寫註釋了,吼吼其實也就這麽幾行代碼頭文件 /