QPainter实现简单的绘图程序(绘图工具)

本文介绍了如何利用QPainter和QImage优化鼠标绘图,避免因点的数量增加导致的图形失真问题。通过创建一个图像作为绘图设备,在鼠标事件中直接在image上绘画,再在重绘时仅显示image,从而保持绘图效率。此外,还展示了根据单选按钮选择绘制矩形、圆形、直线或自由涂鸦的实现方法。

上一篇:QPainter之绘制鼠标路径(画笔工具)

前言

本篇来完成一个最基本的绘图小程序,能绘制普通的矩形、圆形、直线、以及任意绘图,并且弥补基础教学中示例程序中的一些瑕疵与不足。

一、程序示例

在这里插入图片描述

二、重要步骤

修改画图方式 —— 重构思想

根据上一篇画笔工具的讲解,不论是用多边形边绘图,还是用绘制路径来绘图,程序总是很容易出现以下这种状况:在用鼠标画笔不停画圈时,画的圈数越多,圆圈越是呈现出具有棱角的多边形形态。(此处不贴图了)

有一种解决办法,就是在鼠标绘图时,用image作为绘图设备,然后在重绘函数中只将此image绘制出来,这样就不会因为鼠标点的增多而导致绘图效率降低。

1.拖入控件

在这里插入图片描述
拖入一个goupbox与4个radiobutton
并将其四个单选按钮的whatThis属性分别设置为1、2、3、4.

//添加槽函数来判断单选按钮选了谁
private slots:
    void checkWho();

增加私有成员,image与num,num用来接收单选按钮的序号,image用于绘图。

private:
    Ui::Widget *ui;
    QImage image;
    int num = 1;//默认为1  代表绘制矩形

2.构造函数初始化变量

代码如下:

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
   
   
    ui->setupUi(this);
    for(QRadioButton *bt:ui->groupBox->findChildren<QRadioButton*>()){
   
   
        connect(bt,&QRadioButton::clicked,this,&Widget::checkWho);
    }//找出所有单选按钮,为它们绑定到checkWho槽函数上
    image = QImage(1920,1080,QImage
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值