Как поддерживать сравнения для объектов QVariant, содержащих пользовательский тип?

Согласно документации Qt,QVariant::operator== не работает, как можно было бы ожидать, если вариант содержит пользовательский тип:

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

Сравнивает этот QVariant с v и возвращает true, если они равны; в противном случае возвращает false.

В случае пользовательских типов их операторы равенства не вызываются. Вместо этого сравниваются адреса значений.

Как вы должны заставить это вести себя осмысленно для ваших пользовательских типов? В моем случае я храню перечисляемое значение в QVariant, например,

В шапке:

enum MyEnum { Foo, Bar };

Q_DECLARE_METATYPE(MyEnum);

Где-то в функции:

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

Что мне нужно сделать по-другому, чтобы это утверждение было правдой?

я понимаюЗачем это не работает - каждый вариант хранит отдельную копию перечисляемого значения, поэтому они имеют разные адреса. Я хочу знать, как я могу изменить свой подход к сохранению этих значений в вариантах, чтобы либо это не было проблемой, либо чтобы они оба ссылались на одну и ту же переменную.

Я не думаю, что для меня возможно обойтись без сравнения равенства для работы. Контекст заключается в том, что я использую это перечисление в качестве UserData в элементах вQComboBox и я хочу иметь возможность использоватьQComboBox::findData найти индекс предмета, соответствующий конкретному перечисляемому значению.

Ответы на вопрос(3)

Ваш ответ на вопрос