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

二、重要步骤
修改画图方式 —— 重构思想
根据上一篇画笔工具的讲解,不论是用多边形边绘图,还是用绘制路径来绘图,程序总是很容易出现以下这种状况:在用鼠标画笔不停画圈时,画的圈数越多,圆圈越是呈现出具有棱角的多边形形态。(此处不贴图了)
有一种解决办法,就是在鼠标绘图时,用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

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





