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

这些变量检查用户是否用鼠标指针按下了矩形角之一(右上角、左上角、右下角和左下角)。

rect修改

它是一个 QGraphicsRectItem

使用此代码,用户可以调整矩形的大小:

当高度和宽度为正或负时,用户可以调整矩形的大小

但是,当在调整大小期间高度或宽度变为负数时,它会停止工作: 当高度或宽度分别为正和负或负和正时,用户无法调整矩形的大小

mouseMoveEvent() 被调用。但是,当 width()<0 时,“标准化”函数不会交换左右角,如果 height()<0 则不会交换顶角和底角,正如 Qt 文档中所说。

请问你能帮帮我吗 ?

4

0 回答 0