有没有办法覆盖加载自定义类的Qt QList的比较机制。
即在java中你只需要覆盖一个compare方法。
我正在使用我的customclass模型的QList。
QList <CustomClass *>list;
CustomClass *c1=new CustomClass();
c1.name= "john";
list.append(c2);
CustomClass *c2=new CustomClass();
c2.name= "john";
qDebug()<<list.contains(c2); //false
//Secondly I have overridden the equals '==' operator and still getting false
qDebug()<< (c1 == c2); //false, why ?
qDebug()<< (c1->operator ==(*c2)); //true
class CustomClass
{
QString name;
bool operator==(const CustomClass& other)const
{
if(this->name==(other.name))
{
return true;
}
return false;
}
}
答案 0 :(得分:5)
这一行:
qDebug()<< (c1 == c2); //false, why ?
它是false
因为你没有比较实际的实例,而是指针。
请改为尝试:
qDebug()<< (*c1 == *c2);
答案 1 :(得分:2)
对于第一个问题,您需要存储实际对象,而不仅仅是指向它们的指针。为了能够将对象存储在Qt容器中,例如QList
,该类必须具有以下内容:
在这种情况下,编译器隐式生成的构造函数和赋值运算符就足够了。如果你的班级有例如指针成员,您需要明确的复制/分配来涵盖所有权问题。
对于QList::contains()
,您可以像现在一样重载operator==()
。
对于第二个问题,@ Joachim Pileborg是正确的。