2016-11-07 6 views
0

Ich füge QGraphicsPixmapItems zu meiner Szene hinzu, und ich kann sehen, dass wenn ich das Objekt anwähle, es das weiß gestrichelte Auswahlrechteck bekommt, aber ich habe Mühe, irgendwelche Daten aus dieser Auswahl zu bekommen. Hier ist, wie ich es der Szene hinzufüge.Identifizieren, welches QPixmapItem ausgewählt wurde

void MainWindow::drawImage(curTarget *newTarget){ 
    QGraphicsPixmapItem *tgt = new QGraphicsPixmapItem;//new pixmap 
    tgt = scene->addPixmap(newTarget->myIcon);//assign pixmap image 
    tgt->setFlag(QGraphicsItem::ItemIsSelectable, true); 
    scene->addItem(tgt); 

}

Jede PixmapItem, die ich zu der Szene hinzufügen hat Daten struct mit ihm verbunden, und ich muss in der Lage sein, diese Daten abzurufen, wenn ich auf dem QGraphicsPixmapItem wählen innerhalb des QGraphicsScene. Wenn das Auswahlrechteck angezeigt wird, wenn das Pixmapitem ausgewählt ist, gibt es dann keine einfache Möglichkeit, basierend auf dieser Tatsache Informationen an mich zurückzugeben? Ein Zeiger auf was ist vielleicht ausgewählt?

Ich habe eine MousePressEvent-Methode implementiert, aber ich habe Mühe, etwas relevantes dabei zu bekommen.

void MainWindow::mousePressEvent(QMouseEvent *event){ 
qDebug() << "Clicked" << endl; 
} 

Wenn ich die app laufen, sehe ich außer Clicked überall in meiner Szene, als ich auf meinem pixmapitems klicken.

Ich habe jede Version der mousePressEvents ausprobiert und die, die eigentlich etwas tun, nur etwas tun solange ich nicht auf meine Pixmapitems drücke.

+1

QGraphicsScene :: selectedItems() ? – jpnurmi

+0

'mousePressEvent (Ereignis QGraphicsSceneEvent *) { qDebug() << scene-> selectedItems(); } ' gibt nichts zurück – bauervision

+1

Anstatt" mousePressEvent "zu überschreiben, erstellen Sie eine Funktion, die die aktuelle Auswahl überprüft und sie mit dem [' QGraphicsScene :: selectionChanged'] verbindet (http://doc.qt.io/qt-5/) qgraphicsscene.html # selectionChanged) Signal. –

Antwort

0

Dank der Hilfe, die ich in meinen Kommentaren erhielt, werde ich aufschreiben, was letztendlich für mich funktioniert hat.

 void MainWindow::drawImage(curTarget *newTarget) 
    { 
     QGraphicsPixmapItem *tgt = new QGraphicsPixmapItem 
     tgt = scene->addPixmap(newTarget->myIcon); 
     tgt->setFlag(QGraphicsItem::ItemIsSelectable, true); 
     scene->addItem(tgt); 
    } 

Mit der neuen Funktion hinzugefügt ...

void MainWindow::whatIsSelected(){ 
QDebug() <<scene->selectedItems() << endl;} 

Und dann machte ich die Verbindung der Szene an anderer Stelle zum Fenster ...

QObject::connect(scene, SIGNAL(selectionChanged()), this, SLOT(whatIsSelected); 
+0

Dies ist OK, wenn Sie drawImage nur einmal aufrufen, aber jedes Mal, wenn Sie "connect" aufrufen, wird eine neue Verbindung erstellt, ohne dass die alte entfernt wird.Wenn Sie viele Bilder hinzufügen, wird die Methode "whatIsSelected" bei jeder Änderung der Auswahl mehrmals aufgerufen. Verschieben Sie den Aufruf "connect" entweder an einen anderen Ort, sodass er nur einmal ausgeführt wird, oder fügen Sie den Verbindungstyp Qt :: UniqueConnection dem Aufruf "connect" hinzu. – goug

+0

Ich brauche es auf jeden Artikel, den ich erstelle. Meine Benutzer müssen die Möglichkeit haben, so oft wie sie möchten auszuwählen/abzuwählen, um die damit verbundenen Daten zu erkunden. Und es wird eine große Menge an Bildern hinzugefügt. – bauervision

+0

meine Antwort bearbeitet, um Ihre zu enthalten – bauervision

Verwandte Themen