이미지를로드하는 QGraphicsView 하위 클래스가 있습니다. 그런 다음 사용자는 클릭하고 드래그하여 해당 이미지에 선을 그릴 수 있습니다.QgraphicsScene에서 선을 하나씩 취소하거나 삭제합니다.
void TabView::mousePressEvent(QMouseEvent *event){
if (event->button() == Qt::LeftButton) {
lineList<<line;
scene->addLine(lineList.last());
}
}
void TabView::keyPressEvent(QKeyEvent * event){
int key = event->key();
switch(key){
case Qt::Key_Delete:
{
lineList.removeLast();
foreach(QLineF line, lineList){
scene->addLine(line);
}
scene->update();
break;
}
}
}
그러나이 작동하지 않습니다
void TabView::mousePressEvent(QMouseEvent *event){
if (event->button() == Qt::LeftButton) {
scene->addLine(line);
}
}
는이 같은 실행 취소 기능을 추가했다. 나는 이것을 시도했다
case Qt::Key_Delete:
QGraphicsLineItem *item = new QGraphicsLineItem(lineList.last());
scene->removeItem(item);
scene->update();
break;
그러나 이것도 작동하지 않는다.
내 문제는 : QgraphicsScene에서 항목을 하나씩 실행 취소하거나 삭제할 수있는 방법은 무엇입니까?
편집 : 이것 보기는 :
case Qt::Key_Delete:
{
itemList = scene->items();
itemList.removeLast();
foreach(QGraphicsItem *item, itemList){
scene->addItem(item);
}
scene->update();
break;
}
그것은 작동 할 것으로 예상하지만,하지 않습니다.
정말 왜 작동하지 않는지 궁금합니다. 당신의 삭제 코드에서
예 알고 있습니다. 하지만 나는 아주 간단한 것을 원해. 내가 왜 작동하지 않는 골동품인가? – dare
잘못된 항목을 추적하고 있습니다. 내 대답을 확장했습니다. 실행 취소 프레임 워크를 사용하면 생각보다 훨씬 간단한 대답이 될 수 있습니다. 또한'TabView' 클래스가 [god 객체] (http://en.wikipedia.org/wiki/God_object)가되지 않도록합니다. – RobbieE