我有一个填充有 QGraphicsRectItem 元素(小矩形)的 QVector,当用户单击它时,我需要删除一个矩形。我尝试使用removeItem(vec.begin() + i)
anddelete vec.begin() + i
函数,removeItem(vec[i])
and delete vec[i]
, vec.erase(vec.begin() + 1)
. 但在第一种情况下,程序会输出一条消息:
C:\Users\1\Documents\my_game\myscene.cpp:24: error: no matching function for call to 'myscene::removeItem(QVector<QGraphicsRectItem*>::iterator)' removeItem(vec.begin() + i);
在第二种情况下,当我单击一个矩形时,它会删除所有矩形。
在第三种情况下,它根本不起作用。
你能告诉我一些其他的方法来解决我的问题吗?
这是代码:
#include "myscene.h"
#include <QGraphicsRectItem>
#include <QGraphicsScene>
#include <QTimer>
#include <QVector>
#include <ctime>
#include <QGraphicsSceneMouseEvent>
myscene::myscene(QObject *parent)
{
srand(time(NULL));
QTimer *t = new QTimer;
t->setInterval(1000);
connect(t, SIGNAL(timeout()), this, SLOT(addrect1()));
t->start();
}
void myscene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
int x1 = event->scenePos().x();
int y1 = event->scenePos().y();
for(int i=0; i<vec.size(); i++){
if ((x1=vec_x[i])&&(y1=vec_y[i])) {
removeItem(vec.begin() + i);
delete vec.begin() + i;
}
}
}
myscene::addrect1()
{
QGraphicsRectItem *newRECT = new QGraphicsRectItem;
x=rand()%481-240;
y=rand()%481-240;
newRECT->setRect(x,y,10,10);
vec.push_back(newRECT);
vec_x.push_back(x);
vec_y.push_back(y);
this->addItem(vec[vec.size()-1]);
}