У меня есть QVector, заполненный элементами QGraphicsRectItem (маленькие прямоугольники), и мне нужно удалить один единственный прямоугольник, когда пользователь нажимает на него. Я пытался использовать функции removeItem(vec.begin() + i)
и delete vec.begin() + i
, removeItem(vec[i])
и 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]);
}