|
Syylc120317 发表于 2015-11-28 18:36
把添加的代码贴出来。
所以我现在用hack的方法解决了这个问题,每次用户按delete键删除选中的item的时候,我就在槽函数末尾加一个item,而这个item的大小是0,位置固定在原点,这样用户看不到绘图软件中有这个item,但是删除之后就可以继续添加新的item了,也就是说可以画图了。但是我不知道这是为什么。改后如下:
void MyView::deleteItem()
{
foreach (QGraphicsItem *item, scene->selectedItems()) {
item = (MyItem*)item;
scene->removeItem(item);
delete item;
}
QRect rect(0, 0, 0, 0);//原点,大小为0,用户看不见
MyItem* item = new MyItem(QGraphicsView::mapToScene(rect).boundingRect());
item->getShape().setShape(MyShape::Ellipse);//这里无所谓了,随便画一个形状
scene->addItem(item);
}
还有一个问题,就是我的程序的结构问题,一直感觉程序写的有点混乱,自定义类继承了view和item,
不知道是不是应该继承scene更好,因为是画图程序,可以画很多形状,我把形状写成一个类,但是也没有使用继承,用了一个枚举变量表示形状的类型,结果随笔画的时候要单独处理,感觉是不是继承更好,还是把形状本身的信息放到item里面,重写鼠标事件的时候,重写了item,也重写了view的一部分,为了保证view和item能够通信,我把形状做了桥梁,感觉也不好,还有应该在哪个类里面最终把所有类型的对象整合起来,也没有考虑好,是在mainwindow里面一起考虑view,scene,item吗,我目前是把scene作为成员变量放在view里面,item直接加到scene里面,然后再mainwindow里面把view整合进去,感觉很怪,虽然程序能跑,大部分问题都解决了。希望有经验的程序员指导一下,写一个完整的应用的时候,应该怎么考虑重构代码,让代码更整洁,看起来结构更合理,修改起来更方便,谢谢。
|
|