2016-04-29 13 views
0

diesen Code vor:QComboBox :: Finddata schlägt fehl, wenn QVariant ein std :: vector speichert

std::vector< std::vector<int> > v; 
v.push_back(std::vector<int>(1, 4)); 
v.push_back(std::vector<int>(1, 3)); 
QComboBox box; 
box.addItem("", QVariant::fromValue<std::vector<int>>(v[0])); 
box.addItem("", QVariant::fromValue<std::vector<int>>(v[1])); 
int pos = box.findData(QVariant::fromValue<std::vector<int>>(v[0])); 

pos ist -1, wenn 0 erwartet wurde.

Die manuelle Suche (nach i bis box.count()) ist machbar und funktioniert. Als (box.itemData(0).value< std::vector<int> >() == v[0]) gibt überraschend true zurück! Aber findData soll auch funktionieren!

Hinweis: Das Hinzufügen Q_DECLARE_METATYPE(std::vector<int>); nicht

bearbeiten 2016.05.03 geholfen hat: Gefülltes ein Qt Fehler: https://bugreports.qt.io/browse/QTBUG-53152

+1

Haben Sie versucht, einen anderen Typ als 'A' zu verwenden, z. B.' int'? Dies wird isolieren, wenn das Problem mit "A" oder "std :: vector" auftritt. –

+0

@JonHarper: Guter Punkt. Das gleiche Problem mit 'int *', so scheint das Problem von 'std :: vector' – jpo38

+0

Vielleicht versuchen Sie' Q_DECLARE_METATYPE (std :: vector ) '? –

Antwort

2

QMetaType::registerComparators hat genannt zu werden haben operator== statt bitweise Vergleich verwendet werden.

Aufruf (einmal): QMetaType::registerComparators<std::vector<int>>(); macht findData arbeiten.

Verwandte Themen