bool QVariant::operator== ( const QVariant & v ) const
Сравнивает этот QVariant с v и
возвращает true, если они равны;
в противном случае возвращает false.
В случае пользовательских типов их
операторы равенства не вызываются.
Вместо этого сравниваются адреса значений
.
Как вы должны заставить это вести себя значимо для ваших пользовательских типов? В моем случае я сохраняю перечисляемое значение в QVariant, например
В заголовке:
Код: Выделить всё
enum MyEnum { Foo, Bar };
Q_DECLARE_METATYPE(MyEnum);
Код: Выделить всё
QVariant var1 = QVariant::fromValue(Foo);
QVariant var2 = QVariant::fromValue(Foo);
assert(var1 == var2); // Fails!
Я понимаю, почему оно не работает — каждый вариант хранит отдельную копию перечислимого значения, поэтому у них разные адреса. Я хочу знать, как я могу изменить свой подход к хранению этих значений в вариантах, чтобы либо это не было проблемой, либо чтобы они оба ссылались на одну и ту же базовую переменную.
Я не думаю, что смогу обойти необходимость сравнения на равенство для работы. Контекст таков, что я использую это перечисление в качестве UserData в элементах QComboBox, и я хочу иметь возможность использовать QComboBox::findData для поиска индекса элемента, соответствующего конкретному перечисляемому значению.
Подробнее здесь: https://stackoverflow.com/questions/286 ... ustom-type
Мобильная версия