В соответствии с документацией 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
для поиска индекса элемента, соответствующего конкретному перечисляемому значению.