How can I detect collision among QPixmaps and QGraphicsItems objects
-
How did you define main_targets?
Is it
@
QVector<QPixmap> main_targets;
or
QPixmap main_targets[9];
@Qt specific keyword foreach works only with container classes like first definition. If you have second definition then you should use standard C++ for or while loop.
-
Hi,
foreach must be used with a containers. A c array is not considered a container.
In your case you can use a classic for loop or change your array to a QList of QPixmap
Hope it helps
-
I thought the @QVector<QGraphicsPixmapItem*> targetItems;
foreach(QPixmap pix, main_targets) {
QGraphicsPixmapItem* item = QGraphicsPixmapItem(pix);
targetItems.append(item);
}@ takes each instance of the main_targets array, and creates QGraphicsPixmapItems of them. -
I pass the pmap to the MainTarget class by pointer, which was previously by reference. There isn't a specific line that the compiler is showing. It crashes on execution. I replaced main_targets[index] with targetItems since that should hold the QGraphicsPixmapItem items.
@void Dialog::setPixmaps()
{
//Targets are delivered every 1sec
Five_timer->start(1000);QList<QGraphicsPixmapItem*> targetItems; foreach(QPixmap pix, main_targets) { QGraphicsPixmapItem* p_item = new QGraphicsPixmapItem(pix); targetItems.append(p_item); } int StartY = 0; //Random starting Y point between -140 and -389 StartY = (qrand() % (-400 + 150) -140); index = (qrand() % 9); { if(index % 2 == 0) { //When even is selected start at far right pmap = new MainTargets(targetItems[index], 0); pmap->setPos(345,StartY); } else { //When odd is selected start at far left pmap = new MainTargets(targetItems[index], 1); pmap->setPos(-325,StartY); } } scene->addItem(pmap);}@
-
Guess that is where the problem is I thought the @ QList<QGraphicsPixmapItem*> targetItems;
foreach(QPixmap pix, main_targets) {
QGraphicsPixmapItem* p_item = new QGraphicsPixmapItem(pix);
targetItems.append(p_item);@ fills the main_target list. If not what is the purpose of this line? -
@ main_targets[0] = QPixmap(":images/darkbluelogo.jpg");
main_targets[1] = QPixmap(":images/graylogo.jpg");
main_targets[2] = QPixmap(":images/lightbluelogo.jpg");
main_targets[3] = QPixmap(":images/lime.jpg");
main_targets[4] = QPixmap(":images/pink.jpg");
main_targets[5] = QPixmap(":images/purple.jpg");
main_targets[6] = QPixmap(":images/redlogo.jpg");
main_targets[7] = QPixmap(":images/yellow.jpg");
main_targets[8] = QPixmap(":images/brown.jpg");@The main_targets are created and stored in the constructor initially before anything is done. So the qlist should have 9 qpixmaps.
-
If I'm not mistaken you need to use .append() method to add elements to the QList. QList::opeartor[] does not work for adding new elements.
EDIT: Yep, you have to use append() or operator+=() to extend a list "operator[]":http://qt-project.org/doc/qt-5/qlist.html#operator-5b-5d requires an index to be valid (0 <= i < qlist.size())
-
I wouldn't delete the items right away, but only hide them, and delete them later on. But otherwise, it might be something like this.
Have you taken a look at the Colliding Mice example?