QGraphicsItem限制拖动方向和位置
生活随笔
收集整理的這篇文章主要介紹了
QGraphicsItem限制拖动方向和位置
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在使用QGraphicsItem繪制圖形時,有時候需要限制拖動方式,如只能水平拖動或者只能垂直拖動。查找了一些資料,具體出處也不記得了,找到利用itemChange()函數(shù)限制移動位置的方法。
首先,繼承要繪制的QGraphicsItem類,實現(xiàn)自己的類。設(shè)置flag如下:
setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable|QGraphicsItem::ItemSendsGeometryChanges);//QGraphicsItem::ItemIsSelectable表示item可選中
//QGraphicsItem::ItemIsMovable表示Item可移動
//QGraphicsItem::ItemSendsGeometryChanges使itemChange()函數(shù)有效。
其次,重載itemChange()函數(shù)。其中rect用來限制移動范圍,高度設(shè)置為0則只能水平移動,寬度設(shè)置為0則只能垂直移動。
QVariant MyRectItem::itemChange(GraphicsItemChange change, const QVariant &value) {if (change == ItemPositionChange && scene()){QPointF newPos = value.toPointF();QRectF rect(0, this->pos().y(), scene()->width(), 0); //水平移動//QRectF rect(0, 0, 0, scene()->height()); //垂直移動//QRectF rect(0, this->pos().x(), scene()->width(), 0); //向右下方移動//QRectF rect(0, -this->pos().x(), scene()->width(), 0); //向右上方移動if (!rect.contains(newPos)){newPos.setX(qMin(rect.right(), qMax(newPos.x(), rect.left())));newPos.setY(qMin(rect.bottom(), qMax(newPos.y(), rect.top())));return newPos;}}return QGraphicsRectItem::itemChange(change, value); }?
總結(jié)
以上是生活随笔為你收集整理的QGraphicsItem限制拖动方向和位置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中.item()的讲解
- 下一篇: 超级终端自动登录