• 11949阅读
  • 10回复

关于QGraphicsView限制Item移动范围 [复制链接]

上一主题 下一主题
离线jamux
 
只看楼主 正序阅读 楼主  发表于: 2009-08-10
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
于QGraphicsView显示于QWidget上,但是想限制滑鼠移动QGraphicsView内的item时不要移出QWidget可是范围外,请问有人知道QGraphicsView限制Item移动范围吗?
离线sbtree
只看该作者 10楼 发表于: 2011-03-09
QT提倡的一个做法是在QGraphicsItem的itemChange函数中限制位置的变化
  1.         if(change == ItemPositionChange)
  2.         {
  3.             QPointF newPos = value.toPointF();
  4.             if(scene())
  5.             {
  6.                          //这里重新设置item的位置
  7.                          newPos = ....
  8.             }
  9.             return newPos;
  10.         }

这样做的一个麻烦就是要对所有的item类型重新实现itemChange函数。其他方法都要考虑更多的条件,实现起来相对复杂。
windows 7 + VC++2008 + Qt4.5.2
离线sjjyyetg
只看该作者 9楼 发表于: 2011-03-08
在鼠标移动事件发生时,时刻检测Item的范围,若到达边界就停住不动。pos
离线jamux
只看该作者 8楼 发表于: 2009-08-18
    
Qt Examples and Demos--->Graphics View--->Elastic Nodes
这个范例滑鼠拉动item也是会移出视窗范围外,对于限制item只限程式移动之item;所以
还是无法限制滑鼠拉动item范围,不知还有其他可限制的方法吗?
离线donixli1314

只看该作者 7楼 发表于: 2009-08-12
Qt Examples and Demos--->Graphics View--->Elastic Nodes
看看这个的代码
改改就可以了限制Items的移动范围了
离线jamux
只看该作者 6楼 发表于: 2009-08-12
    
刚刚试过,一样没用 @@
离线donixli1314

只看该作者 5楼 发表于: 2009-08-12
scene->setSceneRect (...);
试试这个有没有用
离线jamux
只看该作者 4楼 发表于: 2009-08-12
通过限制QGraphicsScene的大小来限制scene里Item的移动范围
    
我有试过,但是都无法限制item移动至主widget外面,代码如下:

    QGraphicsView * graphicsView;
    QGraphicsScene *scene = new QGraphicsScene(m_ui->frame);
    graphicsView = new QGraphicsView(scene,m_ui->frame);
    //graphicsView->setFixedHeight(190);
    //graphicsView->setFixedWidth(423);
    graphicsView->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
    graphicsView->setFrameRect(QRect(0,0,423, 190));
    graphicsView->setMinimumSize(423, 190);
    graphicsView->setResizeAnchor(QGraphicsView::AnchorViewCenter);
    graphicsView->setGeometry(0,0,426,190);//203);
    graphicsView->setSceneRect(0,0,426,190);//203);
    graphicsView->setStyleSheet("background: transparent; border: 0px solid #8f8f91;");

不知还有啥么好方法可以限制移动范围
离线donixli1314

只看该作者 3楼 发表于: 2009-08-11
好像可以通过限制QGraphicsScene的大小来限制scene里Item的移动范围
qt demo中有个类似的
你看看
离线luoyes

只看该作者 2楼 发表于: 2009-08-11
我做过类似的,给你提个思路:鼠标松开时去判断Item是否超出了View的范围。
离线jamux
只看该作者 1楼 发表于: 2009-08-11
换个方式问,请问有人知道如何限制QGraphicsView大小吗?
因为不让QGraphicsView内的item被mouse给移动到视窗外而看不见,还请赐教,谢谢
快速回复
限100 字节
 
上一个 下一个