• 10584阅读
  • 9回复

怎样在QGraphicsView上画直线和方框 [复制链接]

上一主题 下一主题
离线tan_tan_1
 
只看楼主 倒序阅读 楼主  发表于: 2011-06-26
鼠标按下点为起始点,松开时为结束点,我在QGraphicsScene中添加了QGraphicsRectItem,不知道怎么样画QGraphicsRectItem
离线XChinux

只看该作者 1楼 发表于: 2011-06-27
QGraphicsScene不是有addRect()的方法么?还有 addLine()的。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线tan_tan_1
只看该作者 2楼 发表于: 2011-06-27
引用第1楼XChinux于2011-06-27 13:30发表的  :
QGraphicsScene不是有addRect()的方法么?还有 addLine()的。

这个我知道,我也用了,现在需要在鼠标拖动的时候rect也要实时显示
离线tan_tan_1
只看该作者 3楼 发表于: 2011-06-27
已解决,方法将mousePress时的点保存为Startpoint,在mouseMoveEvent时按照startpoint和鼠标的当前位置关系将startpoint和鼠标点设置为topleft,topright,bottomleft,bottomright
离线lyjbbq

只看该作者 4楼 发表于: 2011-07-01
楼上的兄弟可以不可以发一份代码给我呢?我最近也在学习这个
离线tan_tan_1
只看该作者 5楼 发表于: 2011-07-02

  1. void ViewScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
  2. {
  3.     if (event->button() != Qt::LeftButton)
  4.     {
  5.         return;
  6.     }
  7.     PressFlag = true;
  8.     RectVector.push_back(new QGraphicsRectItem(QRectF(event->scenePos(),event->scenePos())));
  9.     StartPoint = event->scenePos();
  10.     RectVector.at(RectCount)->setPen(QPen(QColor(0,0,0)));
  11.     addItem(RectVector.at(RectCount));
  12.     QGraphicsScene::mousePressEvent(event);
  13. }
  14. void ViewScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
  15. {
  16.     if(true == PressFlag)
  17.     {
  18.         if((RectVector.at(RectCount)->rect().y() < event->scenePos().y())&&(RectVector.at(RectCount)->rect().x() < event->scenePos().x()))
  19.         {
  20.             QRectF newRect;
  21.             newRect.setTopLeft(StartPoint);
  22.             newRect.setBottomRight(event->scenePos());
  23.             RectVector.at(RectCount)->setRect(newRect);
  24.         }
  25.         else if((RectVector.at(RectCount)->rect().top() > event->scenePos().y())&&(RectVector.at(RectCount)->rect().left() < event->scenePos().x()))
  26.         {
  27.             QRectF newRect;
  28.             newRect.setBottomLeft(StartPoint);
  29.             newRect.setTopRight(event->scenePos());
  30.             RectVector.at(RectCount)->setRect(newRect);
  31.         }
  32.         else if((RectVector.at(RectCount)->rect().y() > event->scenePos().y())&&(RectVector.at(RectCount)->rect().x() > event->scenePos().x()))
  33.         {
  34.             QRectF newRect;
  35.             newRect.setBottomRight(StartPoint);
  36.             newRect.setTopLeft(event->scenePos());
  37.             RectVector.at(RectCount)->setRect(newRect);
  38.         }
  39.         else if((RectVector.at(RectCount)->rect().top() < event->scenePos().y())&&(RectVector.at(RectCount)->rect().left() > event->scenePos().x()))
  40.         {
  41.             QRectF newRect;
  42.             newRect.setTopRight(StartPoint);
  43.             newRect.setBottomLeft(event->scenePos());
  44.             RectVector.at(RectCount)->setRect(newRect);
  45.         }
  46.     }
  47. }
  48. SetSceneXY(event->scenePos().x(),event->scenePos().y());
  49. update();
  50. }
  51. void ViewScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
  52. {
  53.     if(true == PressFlag)
  54.     {
  55.         switch(ItemSharp)
  56.         {
  57.              if(RectVector.at(RectCount)->rect().topLeft() == event->scenePos())
  58.             {
  59.                 removeItem(RectVector.at(RectCount));
  60.                 RectVector.pop_back();
  61.                 break;
  62.             }
  63.             TextVector.push_back(new QGraphicsTextItem());
  64.             addItem(TextVector.at(TextCount));
  65.             TextVector.at(TextCount)->setPlainText("distance");
  66.             TextVector.at(TextCount)->setPos(event->scenePos());
  67.             RectCount++;
  68.         }
  69.     }
  70.     PressFlag = false;
  71.     QGraphicsScene::mouseReleaseEvent(event);
  72. }

离线littleboxes

只看该作者 6楼 发表于: 2012-07-10
回 5楼(tan_tan_1) 的帖子
你好,能不能传一个完整的程序啊,新手学习 ,有的地方看不懂 。O(∩_∩)O谢谢
离线乙醚

只看该作者 7楼 发表于: 2012-07-10
回 楼主(tan_tan_1) 的帖子
yafeilinux的教程上有的啊
离线littleboxes

只看该作者 8楼 发表于: 2012-07-10
回 7楼(乙醚) 的帖子
能给个具体链接吗?O(∩_∩)O谢谢
离线ansly20060

只看该作者 9楼 发表于: 2012-11-09
能发个完成的程序啊
快速回复
限100 字节
 
上一个 下一个