Как отсортировать QList QGraphicsitem по координатам х или координатам у? - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь найти наилучший из возможных способов сортировки QList из QGraphicsitems по координатам.x () или corre.y () этих элементов. Я много искал в течение нескольких месяцев, но пока не мог найти решение, ... должно быть что-то в этом роде ... извините, я нуб, ... я стараюсь изо всех сил! Спасибо! (идея того, как это должно быть ...)

void sortedby()
{
    QList<QGraphicsItem *> allitems = items();
    QList<QGraphicsItem *> alltypedos;
        foreach(auto item, allitems) {
        if(item->type() == chord::Type) {
           alltypedos.append(item);
        }
    }
    qSort(alltypedos.begin(), alltypedos.end(), item->x());
}

1 Ответ

0 голосов
/ 10 апреля 2019

Просто используйте std::sort с пользовательской функцией сравнения:

bool lessThan(QGraphicsItem * left, QGraphicsItem * right)
{
    return (left->x() < right->x());
}
    QList<QGraphicsItem *> items;
    auto* it1 = new QGraphicsRectItem(QRect(20, 10, 10, 10));
    auto* it2 = new QGraphicsRectItem(QRect(20, 10, 10, 10));
    auto* it3 = new QGraphicsRectItem(QRect(20, 10, 10, 10));
    auto* it4 = new QGraphicsRectItem(QRect(20, 10, 10, 10));

    it1->setPos(20, 0);
    it2->setPos(10, 0);
    it3->setPos(40, 0);
    it4->setPos(15, 0);
    items << it1 << it2 << it3 << it4;

    std::sort(items.begin(), items.end(), lessThan);
    for(QGraphicsItem * item: items)
    {
        qDebug() << item->pos();
    }
...