¿Cómo admitir comparaciones para objetos QVariant que contienen un tipo personalizado?

De acuerdo con la documentación de Qt,QVariant::operator== no funciona como cabría esperar si la variante contiene un tipo personalizado:

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

Compara este QVariant con v y devuelve verdadero si son iguales; de lo contrario devuelve falso.

En el caso de los tipos personalizados, sus operadores de igualdad no se llaman. En cambio, se comparan las direcciones de los valores.

¿Cómo se supone que debes hacer que esto se comporte de manera significativa para tus tipos personalizados? En mi caso, estoy almacenando un valor enumerado en un QVariant, p.

En un encabezado:

enum MyEnum { Foo, Bar };

Q_DECLARE_METATYPE(MyEnum);

En algún lugar de una función:

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

¿Qué necesito hacer de manera diferente para que esta afirmación sea verdadera?

entiendopor qué no funciona: cada variante está almacenando una copia separada del valor enumerado, por lo que tienen diferentes direcciones. Quiero saber cómo puedo cambiar mi enfoque para almacenar estos valores en variantes para que esto no sea un problema o para que ambos hagan referencia a la misma variable subyacente.

No creo que sea posible para mí evitar las comparaciones de igualdad para trabajar. El contexto es que estoy usando esta enumeración como UserData en elementos en unQComboBox y quiero poder usarQComboBox::findData para ubicar el índice del elemento correspondiente a un valor enumerado particular.

Respuestas a la pregunta(3)

Su respuesta a la pregunta