Как увеличить всю сцену QML2 в QQuickView?

У меня есть документ QML2, который значительно больше, чем дисплей, на котором он отображается с помощью QQuickView. В QML1 и QtDeclarative можно было использовать QGraphicsView::fitInView для масштабирования всей сцены (включая правильное сопоставление MouseEvent и т. д.).

Есть ли что-то подобное для QML2, которого я еще не нашел?


person tzwenn    schedule 29.05.2013    source источник
comment
Вам придется возиться с матрицей представления модели сцены, но в последний раз, когда я смотрел, интерфейс для этого был недоступен.   -  person user1095108    schedule 29.05.2013
comment
Как вы думаете, может ли помочь добавление QSGTransformNode в качестве родителя пользовательского rootObject?   -  person tzwenn    schedule 29.05.2013
comment
Можете ли вы обернуть весь документ в Item верхнего уровня, а затем масштабировать его?   -  person peppe    schedule 30.05.2013
comment
Это то, что я сделал. Поскольку я использую пользовательский QQuickView, я масштабировал rootObject после того, как статус изменился на QQuickView::Ready.   -  person tzwenn    schedule 30.05.2013


Ответы (1)


Я придумал решение, которое почему-то ведет себя как QGraphicsView::fitInView(aRect, Qt::KeepAspectRatio).

void MyQuickView::fitInView(const QRectF & newRect)
{
    QSizeF newSize = newRect.size();
    qreal horizontalScale = size().width() / newSize.width();
    qreal verticalScale = size().height() / newSize.height();

    // You might want to use another origin
    rootObject()->setTransformOrigin(QQuickItem::TopLeft);

    rootObject()->setSize(newSize);
    rootObject()->setScale(qMin(horizontalScale, verticalScale));
}

В основном это работает, хотя я еще не полностью протестировал весь свой старый код Qt4.8.

person tzwenn    schedule 30.05.2013