qt-自制基本图形绘制器

一个QT新手,记录学习历程
在qt官方文档没有找到搜索功能,每次都是一个个找函数位置,如果你知道方便的查找某个函数的文档,欢迎评论告诉我

之前学计算机图形学做了一个图形绘制器,这次弄相当于一个更新。用了部分助教提供的架构设计以及复用了上次自己的代码,所以也许你会感觉似曾相识(原项目也在github就是CG那个)。

边写的时候有修修补补,前后可能不一致

UI界面设计

其他

  • 拖拽的时候要看好位置放到工具栏里面
  • 右键toolBar添加分隔符
  • 命名:推荐保留action前缀,表示这是一个Qaction动作
  • 加图片资源的时候突然发现原来可以鼠标选中一片图形,我原来都是乖巧地一个一个加,可浪费时间

在这里插入图片描述
这个弄完之后长这样
在这里插入图片描述

特别说明:界面参考@GeeeekExplorer(应该是我上一届的学长),图片来源也是从这位同学项目资源(https://github.com/GeeeekExplorer/NJU-Computer-Graphics/tree/master/rc,并不是自己制作!非常感谢学长,如果您不希望我使用这些图片,可以联系我剔除。我的邮箱是work_Jessica@163.com
其他图片,我也没想到啥好方法,就用procreate自己画(又是procreate大材小用的一天)

UI界面不更新

设计完界面之后做槽函数绑定,加入事件

一个无情的文档搬运工

槽机制
文档-鼠标事件
文档-Qwidget-鼠标移动,按下,释放函数都在同页面
文档-绘图事件
文档-Qwidget-绘图函数
文档-Qwidget-窗口大小
文档-画笔
文档-笔刷
文档-qlist
文档-qvector

现在的大体结构
在这里插入图片描述

在这里插入图片描述

绘制

绘图事件

  • 先写paint事件的坏处是忘记了resize事件,画布直接没有初始化(dogie)
  • 要转成像素图,不然image显示不出来霍
void MainWindow::paintEvent(QPaintEvent *event){
   
    Q_UNUSED(event);
    m_image.fill(Qt::white);
    m_painter.begin(&m_image);
    for(Shape* p:m_shapes){
   
        m_painter.setPen(p->pen());
        m_painter.drawPoints(p->points());
    }
    m_painter.end();
    ui->label->setPixmap(QPixmap::fromImage(m_image));
}

void MainWindow::resizeEvent(QResizeEvent *event){
   
    Q_UNUSED(event);
    ui->label->resize(ui->centralwidget->size());
    m_image = QImage(ui->label->size(), QImage::Format_RGB32);
}

直线:DDA/Bresenham/中点画线法

嗯,只能水平竖直线,而且位置也不对
在这里插入图片描述
原因是坐标没有转换:QT获取鼠标位置
现在位置对了,但是只有水平竖直线
在这里插入图片描述
改着改着就疯狂未响应,我整个电脑都卡了
在这里插入图片描述
在这里插入图片描述
原因是我合并情况写错了,所以死循环了,嗯。。。内心复杂
至于为什么只有水平竖直,因为这里我把初始点写了int,所以算增量的时候截断成0了
在这里插入图片描述
现在可以了,检查的时候可以一个点按下然后转一圈看各种形态的直线

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值