Qgraphicsscene을 클래스로 구현 한 다음 QGraphicsRectItem을 추가하기 위해 QGraphicsScene :: mousePressEvent를 사용합니다.이 항목에는 QGraphicsRectItem :: mousePressEvent에 대한 구현이 포함되어 있습니다. 문제는 해당 이벤트입니다. rect 항목에서 장면으로 전파되며 클릭하면 새로운 rect 항목이 추가되지만이 항목의 내부 이벤트는 장면에 전파되지 않으므로 이벤트 -> 수락을 시도하지만 이벤트가 전파됩니다. 어떻게 그럴 수있어? 어떤 도움을 주셔서 감사합니다.QGraphicsItem에서 QGraphicsScene으로 이벤트 전달 중단 QT
QWidgets에#include "imageview.h"
ImageView::ImageView(QWidget *parent){
scene = new ImageScene(this);
setScene(scene);
//this->setMouseTracking(true);
this->setInteractive(true);
}
ImageScene::ImageScene(QWidget *parent){
current = NULL;
selection = new QRubberBand(QRubberBand::Rectangle,parent);
selection->setGeometry(QRect(10,10,20,20));
setSceneRect(0,0,500,500);
}
void ImageScene::mousePressEvent(QGraphicsSceneMouseEvent *event){
QGraphicsScene::mousePressEvent(event);
/*IGNORING THIS EVENT FROM QGRAPHICSRECTITEM*/
cout<<"image view"<<endl;
if(this->selectedItems().length() == 0){ /*WORKS BUT IN SOME IMPLEMENTATION IS A PROBLEM (WHEN I DELETE THE ITEM WITH A DELETE BUTTON THE EVENT IS FIRED AND ADD A NEW ITEM .)*/
origin = event->scenePos();
selection->show();
}
}
void ImageScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event){
if(selection->isVisible() && selection->rect().width() >= 20 && selection->rect().height() >= 20){
QGraphicsScene::mouseReleaseEvent(event);
ResizableRect * rselection = new ResizableRect();
//selection->origin = event->scenePos();
//selection->grabMouse();
cout<<"add"<<endl;
this->addItem(rselection);
rselection->setPos(selection->pos());
rselection->setRect(0,0,selection->rect().width(),selection->rect().height());
}
selection->hide();
}
void ImageScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event){
QGraphicsScene::mouseMoveEvent(event);
if(selection->isVisible()){
QPoint rorigin(origin.x(),origin.y());
int xdes = event->scenePos().x();
int ydes = event->scenePos().y();
xdes = xdes > 0? xdes:0;
ydes = ydes > 0? ydes:0;
xdes = xdes < this->width()?xdes:this->width();
ydes = ydes < this->height()?ydes:this->height();
QPoint rdest(xdes,ydes);
selection->setGeometry(QRect(rorigin,rdest).normalized());
}
}
코드에서 event-> accept() 호출은 어디에 있습니까? – jmk
ResizableRect 클래스의 mousePressEvent 함수에서이 클래스는 QGraphicsRectItem을 확장합니다. –
[여기] (http://qt-project.org/doc/qt-4.8/QGraphicsScene.html#event-handling-and-propagation) 및 [여기] (http://qt-project.org/doc)를 참조하십시오. /qt-4.8/qgraphicsitem.html#events). 희망이 도움이됩니다. – sashoalm