Есть ли способ переопределить механизм сравнения Qt QList, загружаемый пользовательскими классами.Проверка Qt-Qlist содержит с пользовательским классом
i.e В java вам просто нужно переопределить метод сравнения.
У меня есть модель 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;
}
}
Одно изменение, в моем выше сообщении MyCustomClass не наследуется от QObject. Когда я унаследовал от QObject, список QList не работает. (Предположим, что мой код выше аналогичен) – user609530
Да, экземпляры класса, полученные из QObject, не могут использоваться в качестве значений в контейнерах. Если вам нужно сохранить 'QObject', сохраните указатели на них. – laalto