相关疑难解决方法(0)

如何支持包含自定义类型的QVariant对象的比较?

根据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用于定位与特定枚举值对应的项索引.

c++ qt qvariant

22
推荐指数
1
解决办法
5019
查看次数

标签 统计

c++ ×1

qt ×1

qvariant ×1