ユーザーがいくつかの四角形を描画し、マウス ポインターを使用してサイズを変更できるグラフィカル ユーザー インターフェイス (GUI) を開発しています。
長方形を描画するコードは完全に機能します。ただし、サイズ変更に関しては、望ましくないバグがいくつか発生します。
これが私のコードです:
void ImageGraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event){
if(startModifying==true){
if(isOnTopLeftCornerPressed==true){
QRectF rectF_buffer(rectModified->rect().bottomRight().x(),rectModified->rect().bottomRight().y(),event->scenePos().x()-rectModified->rect().bottomRight().x(),event->scenePos().y()-rectModified->rect().bottomRight().y());
rectModified->setRect(rectF_buffer.normalized());
}
if(isOnTopRightCornerPressed==true){
QRectF rectF_buffer(rectModified->rect().bottomLeft().x(),rectModified->rect().bottomLeft().y(),event->scenePos().x()-rectModified->rect().bottomLeft().x(),event->scenePos().y()-rectModified->rect().bottomLeft().y());
rectModified->setRect(rectF_buffer.normalized());
}
if(isOnBottomRightCornerPressed==true){
QRectF rectF_buffer(rectModified->rect().topLeft().x(),rectModified->rect().topLeft().y(),event->scenePos().x()-rectModified->rect().topLeft().x(),event->scenePos().y()-rectModified->rect().topLeft().y());
rectModified->setRect(rectF_buffer.normalized());
}
if(isOnBottomLeftCornerPressed==true){
QRectF rectF_buffer(rectModified->rect().topRight().x(),rectModified->rect().topRight().y(),event->scenePos().x()-rectModified->rect().topRight().x(),event->scenePos().y()-rectModified->rect().topRight().y());
rectModified->setRect(rectF_buffer.normalized());
}
}
}
開始変更:
この変数は、ユーザーが「変更モード」にあるかどうかをチェックします。
isOnTopLeftCornerPressed/isOnTopRightCornerPressed/isOnBottomRightCornerPressed/isOnBottomLeftCornerPressed :
これらの変数は、ユーザーが長方形の角 (右上、左上、右下、左下) の 1 つをマウス ポインターで押したかどうかを確認します。
rectModified
QGraphicsRectItem です
このコードを使用すると、ユーザーは四角形のサイズを変更できます。
ただし、サイズ変更中に高さまたは幅が負になると、機能しなくなります。
mouseMoveEvent() が呼び出されます。ただし、width()<0 の場合、「正規化された」関数は、Qt のドキュメントに記載されているように、height()<0 の場合、左右のコーナーをスワップせず、上下のコーナーもスワップしません。
私を手伝ってくれますか ?