根据Qt文档,QVariant::operator==如果变体包含自定义类型,则无法正常工作:
bool QVariant :: operator ==(const QVariant&v)const
将此QVariant与v进行比较,如果它们相等则返回true; 否则返回false.
在自定义类型的情况下,不调用它们的相等运算符.而是比较值的地址.
你怎么能让这个为你的自定义类型表现得有意义?在我的例子中,我将枚举值存储在QVariant中,例如
在标题中:
enum MyEnum { Foo, Bar };
Q_DECLARE_METATYPE(MyEnum);
Run Code Online (Sandbox Code Playgroud)
功能中的某个地方:
QVariant var1 = QVariant::fromValue<MyEnum>(Foo);
QVariant var2 = QVariant::fromValue<MyEnum>(Foo);
assert(var1 == var2); // Fails!
Run Code Online (Sandbox Code Playgroud)
为了使这个断言成为现实,我需要做些什么呢?
我理解为什么它不起作用 - 每个变体都存储枚举值的单独副本,因此它们具有不同的地址.我想知道如何改变我在变体中存储这些值的方法,以便这不是一个问题,或者它们都引用相同的底层变量.
它不认为我可以绕过需要平等比较才能工作.上下文是我使用此枚举作为a中项目的UserData QComboBox,我希望能够QComboBox::findData用于定位与特定枚举值对应的项索引.