前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt中基本的绘图方法

Qt中基本的绘图方法

作者头像
mythsman
发布2022-11-14 14:53:54
6800
发布2022-11-14 14:53:54
举报
文章被收录于专栏:mythsman的个人博客

Qt中实现绘图功能和其他的库差不多,主要靠Painter,Pen,Brush之类的东西进行描绘。这里主要牵涉到QPainter,QPen,QBrush三个类,用法也很简单。下面主要是实现一个全面显示各种图形的程序,定义了两个类,一个负责绘图区,一个负责用户交互,这里先介绍绘图区的类。

Painter.pro

代码语言:javascript
复制
#-------------------------------------------------
#
# Project created by QtCreator 2015-11-02T18:38:46
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = Painter
TEMPLATE = app

SOURCES += main.cpp 
    painter.cpp 
    widget.cpp

HEADERS  += 
    painter.h 
    widget.h

painter.h

代码语言:javascript
复制
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QBrush>
#include<QPen>
#include<QPainter>
#include<QRect>
#include<QPoint>
#include<QDebug>
class Painter : public QWidget
{
    Q_OBJECT

public:
    Painter(QWidget *parent = 0);
    ~Painter();
public:
    //枚举所有类型的图形
    enum Shape{Line,Rectangle,RoundRect,Ellipse,Polygon,Polyline,Points,Arc,Path,Text,Pixmap};
    void setShape(Shape);
    void setPen(QPen);
    void setBrush(QBrush);
    //重写重绘事件
    void paintEvent(QPaintEvent*);
private :
    Shape shape;
    QBrush brush;
    QPen pen;

};

#endif // WIDGET_H

painter.cpp

代码语言:javascript
复制
#include "painter.h"

Painter::Painter(QWidget *parent)
    : QWidget(parent)
{
    setPalette(QPalette(Qt::white));//设置背景
    setAutoFillBackground(true);
    setMinimumSize(400,400);
}

Painter::~Painter()
{

}

void Painter::setShape(Shape s){
    shape=s;
    update();//调用qwidget的update()来更新状态
}

void Painter::setPen(QPen p){
    pen=p;
    update();

}

void Painter::setBrush(QBrush b){
    brush=b;
    update();
}

void Painter::paintEvent(QPaintEvent *){
    qDebug()<<"debug 2";

    QPainter p(this);//拿到当前的画笔句柄

    p.setPen(pen);
    p.setBrush(brush);

    //留一个Qrect备用
    QRect rect(50,100,300,200);

    //留一个QPoint 数组备用
    static const QPoint points[4]={
        QPoint(150,100),
        QPoint(300,150),
        QPoint(350,250),
        QPoint(100,300),
    };

    //留几个角度备用
    int startAngle=30*16;
    int spanAngle=120*16;

    //留一个QPainterPath备用
    QPainterPath path;
    path.addRect(150,150,100,100);
    path.moveTo(100,100);
    path.cubicTo(300,100,200,200,300,300);
    path.cubicTo(100,300,200,200,100,100);

    //根据选择的shape分别显示
    switch(shape){
    case Line://直线
        p.drawLine(rect.topLeft(),rect.bottomRight());
        break;
    case Rectangle://矩形
        p.drawRect(rect);
        break;
    case RoundRect://圆角矩形
        p.drawRoundRect(rect);
        break;
    case Ellipse://椭圆
        p.drawEllipse(rect);
        break;
    case Polygon://多边形
        p.drawPolygon(points,4);
        break;
    case Polyline://多边线
        p.drawPolyline(points,4);
        break;
    case Points://点
        p.drawPoints(points,4);
        break;
    case Arc://弧线
        p.drawArc(rect,startAngle,spanAngle);
        break;
    case Path://路径
        p.drawPath(path);
        break;
    case Text://文字
        p.drawText(rect,Qt::AlignCenter,"Hello Qt!");
        break;
//  case Pixmap://图片
//      p.drawPixmap(150,150,QPixmap("homemythstest.png"));
//      break;
    default:
        break;
    }
}

main.cpp

代码语言:javascript
复制
#include "painter.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Painter.pro
  • painter.h
  • painter.cpp
  • main.cpp
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档