Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt-Qlist使用自定义类检查包含_C++_Qt - Fatal编程技术网

C++ Qt-Qlist使用自定义类检查包含

C++ Qt-Qlist使用自定义类检查包含,c++,qt,C++,Qt,有没有一种方法可以覆盖使用自定义类加载的Qt-QList的比较机制 i、 在java中,您只需重写一个比较方法 我的customclass模型有一个QList QList <CustomClass *>list; CustomClass *c1=new CustomClass(); c1.name= "john"; list.append(c2); CustomClass *c2=new CustomClass(); c2.name= "john"; qDebug()<&l

有没有一种方法可以覆盖使用自定义类加载的Qt-QList的比较机制

i、 在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;
}
}
QList列表;
CustomClass*c1=新的CustomClass();
c1.name=“john”;
列表。追加(c2);
CustomClass*c2=新CustomClass();
c2.name=“john”;
qDebug()此行:

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

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

  • 默认构造函数
  • 复制构造函数
  • 赋值运算符
在这种情况下,编译器隐式生成的构造函数和赋值运算符就足够了。如果您的类有指针成员,则需要显式复制/赋值来解决所有权问题

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


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

在我上面的帖子中,有一个更改MyCustomClass没有继承自QObject。当我从QObject继承时,QList contains不起作用。(假设上面的代码相同)是的,
QObject
-派生类实例不能用作容器中的值。如果需要存储
QObject
s,请存储指向它们的指针。
qDebug()<< (*c1 == *c2);