Wie werden Vergleiche für QVariant-Objekte unterstützt, die einen benutzerdefinierten Typ enthalten?

Nach der Qt-Dokumentation istQVariant::operator== funktioniert nicht wie erwartet, wenn die Variante einen benutzerdefinierten Typ enthält:

bool QVariant :: operator == (const QVariant & v) const

Vergleicht diese QVariante mit v und gibt true zurück, wenn sie gleich sind. Andernfalls wird false zurückgegeben.

Bei benutzerdefinierten Typen werden ihre Gleichheitsoperatoren nicht aufgerufen. Stattdessen werden die Adressen der Werte verglichen.

Wie soll sich das für Ihre benutzerdefinierten Typen sinnvoll verhalten? In meinem Fall speichere ich einen Aufzählungswert in einer QVariante, z. B.

In einem Header:

enum MyEnum { Foo, Bar };

Q_DECLARE_METATYPE(MyEnum);

Irgendwo in einer Funktion:

QVariant var1 = QVariant::fromValue<MyEnum>(Foo);
QVariant var2 = QVariant::fromValue<MyEnum>(Foo);
assert(var1 == var2); // Fails!

Was muss ich anders machen, damit diese Behauptung wahr ist?

Ich versteheWaru funktioniert nicht - jede Variante speichert eine separate Kopie des Aufzählungswerts, sodass sie unterschiedliche Adressen haben. Ich möchte wissen, wie ich meine Vorgehensweise zum Speichern dieser Werte in Varianten ändern kann, damit dies entweder kein Problem darstellt oder beide auf dieselbe zugrunde liegende Variable verweisen.

ch glaube nicht, dass es mir möglich ist, Gleichstellungsvergleiche für die Arbeit zu benötigen. Der Kontext ist, dass ich diese Enumeration als UserData in Elementen in einem @ verwendQComboBox und ich möchte @ verwenden könnQComboBox::findData, um den Elementindex zu suchen, der einem bestimmten Aufzählungswert entspricht.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage