我的项目使用 Qt jambi 4.7.1。我创建了一个名为 Component 的抽象类,它扩展了 QGraphicsRectItem。我设置了我的组件标志,目的是将它移动到同一个 QGraphicsScene 中。
public abstract class Component extends QGraphicsRectItem{
public Signal1<QPoint> componentMoved = new Signal1<QPoint>();
private int id;
private int nextId;
private List<Route> routes = new ArrayList<Route>();
protected QPixmap image;
protected static QSizeF size = new QSizeF(100, 100);
public Component(int pointX1, int pointY1, int id) {
super(new QRectF(new QPointF(pointX1,pointY1),size));
this.id = id;
//this.setFlag(GraphicsItemFlag.ItemIsSelectable, true);
this.setFlag(GraphicsItemFlag.ItemIsMovable,true);
this.setFlag(GraphicsItemFlag.ItemSendsGeometryChanges, true);
this.setCacheMode(CacheMode.DeviceCoordinateCache,new QSize(1024,1024));
}
public void drawComponent(){
new QGraphicsPixmapItem(image.scaled(size.toSize()), this);
}
@Override
public void mousePressEvent(QGraphicsSceneMouseEvent e){
this.setTransformOriginPoint(e.scenePos());
}
@Override
public Object itemChange(GraphicsItemChange change, Object value){
switch (change) {
case ItemPositionHasChanged:
QPointF currentPos = this.scenePos();
componentMoved.emit(currentPos.toPoint());
break;
default:
break;
}
return super.itemChange(change, value);
}
public int getId(){
return id;
}
public int getNextId(){
return nextId;
}
public QPixmap getImage(){
return image;
}
public List<Route> getRoutes(){
return routes;
}
public QSizeF getSize(){
return size;
}
public void addRoute(Component nextComponent){
//routes.add(new Route(this, nextComponent));
}
所以它起作用了,现在我可以通过单击鼠标在我的场景中移动我的组件。但是,当我移动我的组件时,我遇到了一个错误,它总是在每次拖动之前返回到它的初始位置。我确定这只是一件简单的事情,但是我在互联网上搜索了很长时间,但一无所获。
对不起,我的英语不好!:P