Ярлыки

вторник, 23 января 2018 г.

Qt - масштабирование QQuickItem с сохранением позиции

При отрисовке QQuickItem мы переписываем updatePaintNode().
если необходимо смасштабировать обьект в ноде то применяем трансформационную ноду которую перемножаем на трансформационную матрицу.
для того, чтобы обьект остался на своем месте его необходимо сдвинуть в начало координат, а затем вернуть обратно.


QSGNode *quickItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
{
    QRectF bounds = boundingRect();
    QSGNode *n = static_cast(oldNode);
    if (!n) {
        n = new QSGNode();
    } else {
                QSGTransformNode *transformNode = new QSGTransformNode;
                QMatrix4x4 m;
                m.translate(bounds.width()/2, bounds.height()/2,0);
                m.scale(0.1);
                m.translate(-bounds.width()/2, -bounds.height()/2,0);
                transformNode->setMatrix(m);
                n->appendChildNode(transformNode);

    }
    return n;
}


Более подробно тут.

Комментариев нет:

Отправить комментарий