Ваш пример кода страдает от ряда проблем, но там достаточно, чтобы увидеть (я думаю), что вы пытаетесь сделать.
Во-первых, приведенный код на самом деле не добавляет никаких MyObject
экземпляров.в переменную QList<MyObject>
и - на основе некоторого закомментированного кода - вы уже столкнулись с самой большой проблемой: QObject
не копируется.Поскольку MyObject
наследуется от QObject
, это означает, что код, подобный следующему, просто не будет компилироваться ...
QList<MyObject> objects;
MyObject obj("title");
objects.append(obj);
При вызове objects.append(...)
будет сгенерировано сообщение об ошибке в виде строки...
использование удаленной функции 'MyObject :: MyObject (const MyObject &)
Чтобы достичь того, что вы хотите, вам нужно хранить экземпляры MyObject
с помощьюссылка или указатель.Например ...
const QStringList names{"Kevin", "Amy", "Michelle", "John"};
QList<MyObject *> objects;
for (int i = 0; i < names.size(); i++) {
MyObject *obj = new MyObject(names[i]);
obj->setIndex(i);
objects.append(obj);
}
// Sort Alphabetically
std::sort(objects.begin(), objects.end(),
[](const MyObject *a, const MyObject *b) -> bool
{
return a->getTitle() < b->getTitle();
});
// Then Sort By Index
std::sort(objects.begin(), objects.end(),
[](const MyObject *a, const MyObject *b) -> bool
{
return a->getIndex() < b->getIndex();
});
// Print info
for (int i=0; i < objects.size(); i++) {
qDebug() << objects[i]->getIndex();
qDebug() << objects[i]->getTitle();
}
Обратите внимание, что для вышеприведенного требуется, чтобы вы звонили delete
в различных случаях MyObject
, когда они вам больше не нужны - QList
Деструктор не сделает это за вас.
Вместо использования необработанных указателей вы можете рассмотреть возможность использования std::unique_ptr
или std::shared_ptr
в зависимости от ваших конкретных требований.Таким образом, вам не нужно беспокоиться об управлении памятью в той же степени.