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
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. –
@JonHarper: Guter Punkt. Das gleiche Problem mit 'int *', so scheint das Problem von 'std :: vector' – jpo38
Vielleicht versuchen Sie' Q_DECLARE_METATYPE (std :: vector ) '? –