Diese Frage Qt beinhaltet, konnte aber reines C++ Problem mit meiner Logik sein.Hinzufügen QQuickItem Zeiger auf einen std :: map macht sie alle „nicht zugänglich“ Zeiger oder Artikel
I QQuickItem
s zu einer std::map
speichern Informationen über eine Liste von QQuickItem
s & ihren Eltern am hinzufügen.
Der Code:
std::array<std::string, 2> ObjectNamesArray = { "quickitemObj1", "quickitemObj2" };
std::map<QQuickItem*, QQuickItem*> items;
for(const auto& quickitem: ObjectNamesArray) {
QQuickItem * item = Qmlengine->rootObjects()[0]->findChild<QQuickItem*>(quickitem.c_str());
if (item != NULL)
items.insert(std::make_pair(item, item->parent());
// for a test, following works fine with the item pointer within this loop
qreal width ? item->width();
}
Debugging durch obige Schleife, die items
Karte zeigt Null Teile mit dem Tag nicht zugänglich.
Iterating über die Karte wieder so.
std::map<QQuickItem*, QQuickItem*>::iterator it = items.begin();
while (it != items.end()) {
QQuickItem* item = it->first;
QQuickItem * itemParent = it->second; // crashes here as *item is null
it++;
}
Problem:
Aber, wenn ich versuche, durch die Karte zu durchlaufen, gibt es keine gültigen Zeiger auf meine QQuickItem
s. Tatsächlich sieht es so aus, als ob der Karte keine Gegenstände hinzugefügt wurden.
Frage:
Was mit meiner Logik ist falsch? Wie sollte ich QQuickItem
s zu einer std :: map hinzufügen, damit ich sie sicher zurückholen kann.
hinzugefügt null zu überprüfen. Außerdem habe ich einen Aufruf hinzugefügt, um die Breite des 'QQuickItem' in der Array-Schleife abzurufen, was gut funktioniert. nicht sicher, was schief geht, wenn ich 'QQuickItem *' zur Karte hinzufüge. –
Entschuldigung wegen der Verwirrung. habe meine Frage korrigiert, um den genauen Code zu demonstrieren. Bitte werfen Sie einen Blick –
@Programist Versuchen Sie meinen Code jetzt, welchen Compiler verwenden Sie? – Macias