désolé si c'est un peu en retard (6 ans) mais je fournirai une réponse si quelqu'un est encore aux prises avec cela ou veut une autre approche.I implémenter cela dans mouseReleaseEvent dans la classe personnalisée dériver de QgraphicsObject. Notez que j'initialise la taille de mon QgraphicsScene (1000,1000) avec le code suivant. scene->setSceneRect(0,0,1000,1000)
. Alors voici ce que mon code va faire. Si l'élément (l'élément est déplaçable) placé contre la bordure, cette bordure augmentera. Voici donc mon code:
void MyItem::mouseReleaseEvent(QgraphicsceneMouseEvent* event){
QRectF tempRect = this->scene()->sceneRect();
if(this->scenePos().y() < this->scene()->sceneRect().top()){
tempRect.adjust(0,-200,0,0);
if(this->scenePos().x() < this->scene()->sceneRect().left()){
tempRect.adjust(-200,0,0,0);
}
else if(this->scenePos().x() + 200> this->scene()->sceneRect().right()){
tempRect.adjust(0,0,200,0);
}
}
else if(this->scenePos().y() + 200 > this->scene()->sceneRect().bottom()){
tempRect.adjust(0,0,0,200);
if(this->scenePos().x() < this->scene()->sceneRect().left()){
tempRect.adjust(-200,0,0,0);
}
else if(this->scenePos().x() + 200> this->scene()->sceneRect().right()){
tempRect.adjust(0,0,200,0);
}
}
else if(this->scenePos().x() < this->scene()->sceneRect().left()){
tempRect.adjust(-200,0,0,0);
if(this->scenePos().y() < this->scene()->sceneRect().top()){
tempRect.adjust(0,-200,0,0);
}
else if(this->scenePos().y() + 200 > this->scene()->sceneRect().bottom()){
tempRect.adjust(0,0,0,200);
}
}
else if(this->scenePos().x() + 200> this->scene()->sceneRect().right()){
tempRect.adjust(0,0,200,0);
if(this->scenePos().y() < this->scene()->sceneRect().top()){
tempRect.adjust(0,-200,0,0);
}
else if(this->scenePos().y() + 200 > this->scene()->sceneRect().bottom()){
tempRect.adjust(0,0,0,200);
}
}
this->scene()->setSceneRect(tempRect);
+1 pour une réponse claire. Mais que se passe-t-il si je ne veux pas que le contenu soit redimensionné pour s'adapter à l'écran et utiliser une solution de barre de défilement à la place? – Pieter
Attendez, je l'ai trouvé ... Je dois utiliser 'setSceneRect' dans la vue graphique. – Pieter