• 7605阅读
  • 7回复

关于 QGraphicsScene 删除当前指定项的问题 [复制链接]

上一主题 下一主题
离线a发神经a
 
只看楼主 倒序阅读 楼主  发表于: 2011-05-20
本人是一个新手,最近在写一个纸牌类的游戏,现在遇到一个问题,就是我鼠标指定那一张纸牌,需要删除掉,并且还必须要用QGraphicsItem的删除方法,因为用delete的话,会出现内存处理错误,下面是我的纸牌类:
class Pixmap : public QObject, public QGraphicsPixmapItem
{
Q_OBJECT          
Q_PROPERTY(QPointF pos READ pos WRITE setPos)
public:
    Pixmap()
{
  setCursor(Qt::OpenHandCursor);
  setAcceptedMouseButtons(Qt::LeftButton);
}
Pixmap(const QImage &filename,int &n): QObject(), QGraphicsPixmapItem(QPixmap::fromImage(filename))
{
  setCacheMode(DeviceCoordinateCache);
  pic = QImage(filename);
  position = n;
}

protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event)
{
  setCursor(Qt::ClosedHandCursor);
}
void mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
  QDrag *drag = new QDrag(event->widget());
  QMimeData *mime = new QMimeData;
  
  QImage image (pic);
  mime->setImageData(image);
  drag->setMimeData(mime);
  drag->setHotSpot(QPoint(30,30));
  drag->setPixmap(QPixmap::fromImage(image));
        
  drag->exec()
    }
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
  setCursor(Qt::OpenHandCursor);
  
}
private:
QImage pic;

};

然后就是我的GraphicsScene

class GraphicsScene: public QGraphicsScene
{
Q_OBJECT
public:
    GraphicsScene( qreal x, qreal y, qreal width, qreal height,QObject * parent = 0)
: QGraphicsScene (x, y, width, height, parent ){}
public slots:
void AcceptMouseDrop(Pixmap *p)
{
  system("pause");
  QList<QGraphicsItem*> listItem = this->items();
  
  this->removeItem(//指定的位置);
  listItem.removeAt(0);
}
};

现在遇到一个问题就是,我鼠标拖动的时候,不知道怎样把对应的牌的传递给GraphicsScene的那个槽,请问有大牛可以帮忙给个建议,或者给个解决方法吗??
紧急!!!!
离线a发神经a
只看该作者 1楼 发表于: 2011-05-20
自己顶上去!!急救啊!!!
离线hasitate

只看该作者 2楼 发表于: 2011-05-21
使用QGraphicsScene::selectedItems()去取得选中的对应的牌
离线a发神经a
只看该作者 3楼 发表于: 2011-05-21
那要在哪里用,在主函数里面用?还是在鼠标点击的函数里面用?
这个函数是不是取得当前鼠标点击了的对象??
急救!!
离线a发神经a
只看该作者 4楼 发表于: 2011-05-24
多少天了啊~~怎么还没大大来救小弟一命啊~~顶上去!!
离线a发神经a
只看该作者 5楼 发表于: 2011-05-25
继续顶!!!!!!!
离线xuanailian

只看该作者 6楼 发表于: 2012-03-21
我最近想写一个纸牌游戏,不知道从何下手,希望找个纸牌类 学习下
离线sword_master

只看该作者 7楼 发表于: 2012-03-27
回 3楼(a发神经a) 的帖子
你子类化Item的时候 加上可选属性的 是个枚举值 你查下文档...
然后按2楼的做法   用你的Scene调用selectedItems()  注意返回的是QList<QGraphicsItem *>
然后把这个List删了... 你鼠标选的哪张/哪些Item系统都知道了 因为前面那个属性加上了..多选也行 就是按住Ctrl...再点其他的 用鼠标拖拽选择多个item好像不行.....
我也不确定 你可以试试....
??
快速回复
限100 字节
 
上一个 下一个