一个QT新手,记录学习历程
在qt官方文档没有找到搜索功能,每次都是一个个找函数位置,如果你知道方便的查找某个函数的文档,欢迎评论告诉我
边写的时候有修修补补,前后可能不一致
UI界面设计
- 如何添加图片资源
- 程序图标
- 文档-QtoolBar
右键MainWindow添加一个toolBar工具栏,在工具栏中添加action对象
QT添加工具栏 - 画布,用一个Qlabel划定范围,注意大小和位置
文档- qimage
fille函数
其他
- 拖拽的时候要看好位置放到工具栏里面
- 右键toolBar添加分隔符
- 命名:推荐保留action前缀,表示这是一个Qaction动作
- 加图片资源的时候突然发现原来可以鼠标选中一片图形,我原来都是乖巧地一个一个加,可浪费时间
这个弄完之后长这样
特别说明:界面参考@GeeeekExplorer(应该是我上一届的学长),图片来源也是从这位同学项目资源(https://github.com/GeeeekExplorer/NJU-Computer-Graphics/tree/master/rc,并不是自己制作!非常感谢学长,如果您不希望我使用这些图片,可以联系我剔除。我的邮箱是work_Jessica@163.com
其他图片,我也没想到啥好方法,就用procreate自己画(又是procreate大材小用的一天)
设计完界面之后做槽函数绑定,加入事件
一个无情的文档搬运工
槽机制
文档-鼠标事件
文档-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了
现在可以了,检查的时候可以一个点按下然后转一圈看各种形态的直线
//用的是DDA
if (m_