利用QT来实现基本图形的绘制应用

本文介绍了如何使用Qt进行基本图形绘制,通过创建窗口类RenderArea继承自QWidget,定义图形类型并使用枚举。在主界面类Window中,结合Label、复选框、组合框等控件,实现信号与槽的关联及事件处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在今天学习了如果在Qt中实现基本图形的绘制。

首先先看下具体要实现是界面:



从上面可以看出,可以把上面的绘画窗口抽象出来,成为一个窗口类,继承自QWidget。

然后所有的功能再抽象为一个界面类,同样可以继承自QWidget。


首先来分析下上面的图形窗口类RenderArea,   要绘制不同的图形,肯定就需要定义不同的图形类型,在其中就可以通过枚举来实现定义,

具体如下:

    enum Shape{
        Line , Points , Polygon , Rect , RoundedRect , Ellipse ,
        Arc , Chord , Path , Text,Pie , Pixmap
    };

然后肯定要定义一些槽来接收信号,比如图形的改变,画笔画刷等的属性设置等。


public slots:
    void setShape(Shape shape);
    void setPen(const QPen& pen);
    void setBrush(const QBrush& brush);
    void setAnntialiased(bool antialiased);
    void setTransformed(bool transformed);

然后就是在继承自QWidget类的函数 paintEvent 的重绘函数进行重写,以及窗口大小函数的重写等。

    QSize minimumSizeHint()const Q_DECL_OVERRIDE;
    QSize sizeHint() const Q_DECL_OVERRIDE;
    void paintEvent(QPaintEvent * event)Q_DECL_OVERRIDE ;

完成了这些基本就完成了这个类的封装了,然后只需要在主界面类(Window)类中进行信号和槽的关联以及事件的处理就可以了。


然后就是主界面类(Window),从上面可以看出,不仅包含了一个RenderArea类,同时还包含了一系列的控件,比如Label标签,复选框,组合框等一些列控件,

所以在这个类中就是完成这个控件的定义和布局,以及事件响应的处理等。


具体代码如下:


renderarea.h

#ifndef RENDERAREA_H
#define RENDERAREA_H


#include<QBrush>
#include<QPen>
#include<QPixmap>
#include<QWidget>

class RenderArea : public QWidget
{
    Q_OBJECT
public:
    explicit RenderArea(QWidget *parent = 0);
    ~RenderArea();

    enum Shape{
        Line , Points , Polygon , Rect , RoundedRect , Ellipse ,
        Arc , Chord , Path , Text,Pie , Pixmap
    };


    QSize minimumSizeHint()const Q_DECL_OVERRIDE;
    QSize sizeHint() const Q_DECL_OVERRIDE;


signals:

public slots:
    void setShape(Shape shape);
    void setPen(const QPen& pen);
    void setBrush(const QBrush& brush);
    void setAnntialiased(bool antialiased);
    void setTransformed(bool transformed);

protected:
    void paintEvent(QPaintEvent * event)Q_DECL_OVERRIDE ;



private:
    Shape shape;
    QPen pen;
    QBrush brush;
    bool antiliased;
    bool transformed;
    QPixmap pixmap;

};

#endif // RENDERAREA_H

renderarea.cpp


#include "renderarea.h"
#include<QPainter>



RenderArea::RenderArea(QWidget *parent) : QWidget(parent)
{

    //构造函数,完成了对变量的初始化,以及图片的加载等
    shape
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值