根据Qt文档显示,如果QVariant包含自定义类型,则
bool QVariant::operator== ( const QVariant & v ) const
比较此QVariant与v,如果相等则返回true;否则返回false。对于自定义类型,它们的相等运算符不会被调用,而是比较这些值的地址。如何让此运算符对自定义类型有实际意义?在我的情况下,我将枚举值存储在QVariant中,例如:
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!
如何改变我的方法以便这个断言为真?
我知道为什么它不起作用——每个变体都存储了一个枚举值的副本,因此它们具有不同的地址。我想知道如何更改我的方法来存储这些值在变量中,以便要么这不是问题,要么两个变体引用相同的基础变量。
我认为没有可能避免需要进行等式比较。上下文是,我正在使用此枚举作为QComboBox
中项目的UserData,并希望能够使用QComboBox::findData
来查找对应于特定枚举值的项目索引。