Como suportar comparações para objetos QVariant que contêm um tipo personalizado?

De acordo com a documentação Qt,QVariant::operator== não funciona como seria de esperar, se a variante contiver um tipo personalizado:

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

Compara esse QVariant com ve retorna true se forem iguais; caso contrário, retorna false.

No caso de tipos personalizados, seus operadores de igualdade não são chamados. Em vez disso, os endereços dos valores são comparados.

Como você deve fazer isso se comportar de maneira significativa para seus tipos personalizados? No meu caso, estou armazenando um valor enumerado em uma QVariant, por exemplo

Em um cabeçalho:

enum MyEnum { Foo, Bar };

Q_DECLARE_METATYPE(MyEnum);

Em algum lugar de uma função:

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

O que preciso fazer de maneira diferente para que essa afirmação seja verdadeira?

Compreendoporque não está funcionando - cada variante está armazenando uma cópia separada do valor enumerado, para que eles tenham endereços diferentes. Quero saber como posso mudar minha abordagem para armazenar esses valores em variantes, para que isso não seja um problema ou para que ambos façam referência à mesma variável subjacente.

Não acho que seja possível para mim precisar de comparações de igualdade para funcionar. O contexto é que eu estou usando essa enumeração como UserData em itens em umQComboBox e eu quero poder usarQComboBox::findData para localizar o índice do item correspondente a um valor enumerado específico.

questionAnswers(3)

yourAnswerToTheQuestion