zoukankan      html  css  js  c++  java
  • QPainter 基础绘图

    调用QPainter的接口来绘制一些基本的图形

    头文件:

     1 #include <QMainWindow>
     2 #include <QPainter>
     3 
     4 namespace Ui {
     5 class MainWindow;
     6 }
     7 
     8 class MainWindow : public QMainWindow
     9 {
    10     Q_OBJECT
    11 
    12 public:
    13     explicit MainWindow(QWidget *parent = 0);
    14     ~MainWindow();
    15 
    16 private:
    17     void paintEvent(QPaintEvent *event);
    18 
    19 private:
    20     Ui::MainWindow *ui;
    21     int            m_type;
    22 };

    源文件:

     1 #include <QRegExp>
     2 #include <QPixmap>
     3 #include "mainwindow.h"
     4 #include "ui_mainwindow.h"
     5 
     6 MainWindow::MainWindow(QWidget *parent) :
     7     QMainWindow(parent),
     8     ui(new Ui::MainWindow),
     9     m_type(1)
    10 {
    11     ui->setupUi(this);
    12 }
    13 
    14 MainWindow::~MainWindow()
    15 {
    16     delete ui;
    17 }
    18 
    19 void MainWindow::paintEvent(QPaintEvent *event)
    20 {
    21     Q_UNUSED(event)
    22     QPainter painter(this);
    23 
    24     if(m_type == 1) // 绘制文本
    25     {
    26         painter.setPen(Qt::blue);
    27         QFont font;
    28         font.setFamily("Microsoft YaHei");
    29         font.setPointSize(50);
    30         font.setItalic(true);
    31         font.setBold(true);
    32         painter.setFont(font);
    33         painter.drawText(rect(), Qt::AlignCenter, QString::fromLocal8Bit("Qt"));
    34     }
    35     else if(m_type == 2) // 绘制直线
    36     {
    37         painter.setRenderHint(QPainter::Antialiasing, true);
    38         painter.setPen(Qt::blue);
    39         painter.drawLine(QPointF(0, height()), QPointF(width() / 2, height() / 2));
    40     }
    41     else if(m_type == 3) // 绘制矩形
    42     {
    43         painter.setRenderHint(QPainter::Antialiasing, true);
    44         painter.setPen(QPen(Qt::blue, 2));
    45         painter.setBrush(Qt::green);
    46         painter.drawRect(50, 50, 160, 100);
    47     }
    48     else if(m_type == 4) // 绘制弧线
    49     {
    50         QRectF rect(90.0, 90.0, 80.0, 90.0);
    51         int startAngle = 30 * 16;
    52         int spanAngle = 120 * 16;
    53         painter.setRenderHint(QPainter::Antialiasing, true);
    54         painter.setPen(QPen(Qt::blue, 2));
    55         painter.drawArc(rect, startAngle, spanAngle);
    56 
    57     }
    58     else if(m_type == 5) // 绘制椭圆,绘制圆
    59     {
    60         painter.setRenderHint(QPainter::Antialiasing, true);
    61         painter.setPen(QPen(Qt::blue, 2));
    62         painter.drawEllipse(QPointF(120, 160), 50, 20);
    63         painter.setBrush(Qt::green);
    64         painter.drawEllipse(QPointF(120, 140), 40, 40);
    65     }
    66     else if(m_type == 6) // 绘制多边形
    67     {
    68         painter.setRenderHint(QPainter::Antialiasing, true);
    69         painter.setPen(Qt::blue);
    70         static const QPointF points[6] = {QPointF(10, 40), QPointF(60, 190), QPointF(110, 160), QPointF(220, 180), QPointF(270, 120), QPointF(220, 280)};
    71         painter.drawPolygon(points, 6);
    72     }
    73     else if(m_type == 7) // 绘制图片
    74     {
    75         painter.setRenderHint(QPainter::Antialiasing, true);
    76         painter.drawPixmap(rect(), QPixmap(":/images/pic.png"));
    77     }
    78     else if(m_type == 8) // 绘制圆角矩形
    79     {
    80         painter.setRenderHint(QPainter::Antialiasing, true);
    81         painter.setPen(QPen(Qt::blue,2,Qt::SolidLine));
    82         painter.drawRoundRect(80,80,210,160,50,50);
    83     }
    84     else if(m_type == 9) // 绘制扇形
    85     {
    86         painter.setRenderHint(QPainter::Antialiasing, true);
    87         painter.setPen(QPen(Qt::green,2,Qt::SolidLine));
    88         painter.drawPie(80,80,210,160,0,500);
    89     }
    90     else if(m_type == 10) // 绘制弦
    91     {
    92         painter.setRenderHint(QPainter::Antialiasing, true);
    93         painter.setPen(QPen(Qt::green,2,Qt::SolidLine));
    94         painter.drawChord(80,80,210,160,500,1000);
    95     }
    96 }
  • 相关阅读:
    Linux 一块网卡配置多个IP的方法
    Nginx详解篇
    Nginx故障排错及一个网站小实例
    Nginx web 服务器 安装篇
    一些看起来比较专业的工具
    Linux 下软件的安装方法
    Mysq登陆后执行命令提示You must SET PASSWORD before executing this statement
    Linux-Centos 虚拟机安装
    Mysql的多种安装方法———rpm安装
    etcd安装和简单使用
  • 原文地址:https://www.cnblogs.com/tyche116/p/8522462.html
Copyright © 2011-2022 走看看