0

ユーザーがいくつかの四角形を描画し、マウス ポインターを使用してサイズを変更できるグラフィカル ユーザー インターフェイス (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 の場合、左右のコーナーをスワップせず、上下のコーナーもスワップしません。

私を手伝ってくれますか ?

4

0 に答える 0