如何使用鼠标

时间:2015-12-28 10:28:51

标签: c++ image qt user-interface qrect

我正在开发一个图形用户界面(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());

         }   

       }
}
  

startModifying:

此变量检查用户是否处于“修改模式”。

  

isOnTopLeftCornerPressed / isOnTopRightCornerPressed / isOnBottomRightCornerPressed / isOnBottomLeftCornerPressed

这些变量检查用户是否用鼠标指针按下其中一个矩形角(右上角,左上角,右下角和左下角)。

  

rectModified

这是一个QGraphicsRectItem

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

The user can resize the rectangle when the height and width are botth positive or negative

但是,在调整大小时高度或宽度变为负值时,它会停止工作: The user is not able to resize the rectangle when the height or the width are positive and negative or negative and positive respectively

调用mouseMoveEvent()。但是,当width()<0时,“normalized”函数不会交换左右角,如果在Qt文档中说的是height()&lt; 0,则不会交换顶角和底角。

你能帮我吗?

0 个答案:

没有答案