繁体   English   中英

Qt- Qlist检查包含Custom类

[英]Qt- Qlist checking contains with Custom class

有没有办法覆盖加载自定义类的Qt QList的比较机制。

即在java中你只需要覆盖一个比较方法。

我正在使用我的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;
}
}

这一行:

qDebug()<< (c1 == c2); //false, why ? 

它是false因为你不是在比较实际的实例,而是指针。

试试这个:

qDebug()<< (*c1 == *c2);

对于第一个问题,您需要存储实际对象,而不仅仅是指向它们的指针。 为了能够将对象存储在Qt容器(如QList ,该类必须具有以下内容:

  • 默认构造函数
  • 复制构造函数
  • 赋值运算符

在这种情况下,编译器隐式生成的构造函数和赋值运算符就足够了。 如果您的班级有指针成员,您需要明确的复制/分配来涵盖所有权问题。

对于QList::contains()您可以像现在一样重载operator==()

对于第二个问题,@ Joachim Pileborg是正确的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM