9

Qt 5.2 ベータ版、Qt Quick 2.1 を使用しています。

コンポーネントに直接問題がありFlickableます。

最小限の作業コードの例を次に示します。

import QtQuick 2.1
import QtQuick.Controls 1.0

ApplicationWindow {
    width: 300
    height: 200

    Rectangle {
        anchors.fill: parent
        color: "green"

        Flickable {
            id: flickArea
            anchors {fill: parent; margins: 10; }
            contentWidth: rect.width;
            contentHeight: rect.height
            Rectangle {
                id: rect
                x: 0; y: 0;
                width: 200; height: 300;
                color: "lightgrey"

                Rectangle {
                    anchors { fill: parent; margins: 10; }
                    color: "red"
                }
            }
        }
    }
    Button {
        anchors.bottom: parent.bottom;
        anchors.horizontalCenter: parent.horizontalCenter;
        text: "Scale flickArea"
        onClicked: { flickArea.scale += 0.2; }
    }
}

スケーリングを行っているとき、すべての子要素が以前と同じように表示されたままになり、内側の領域が大きくなることを期待しています。

ただし、代わりに、子要素は Flickable コンテンツから移動します。

すべてのオフセットを手動で再計算する必要なく、この問題を回避する通常の方法を誰かが提案できますか?

4

3 に答える 3

4

この方法で期待どおりに動作するようになりましたが、IMO この方法は少しトリッキーです。

import QtQuick 2.1
import QtQuick.Controls 1.0

ApplicationWindow {
    width: 300
    height: 200

    Rectangle {
        anchors.fill: parent
        color: "green"

        Flickable {
            id: flickArea
            anchors {fill: parent; margins: 10; }
            contentWidth: rect.width*rect.scale
            contentHeight: rect.height*rect.scale
            Rectangle {
                id: rect
                transformOrigin: Item.TopLeft
                x: 0; y: 0;
                width: 200; height: 300;
                color: "lightgrey"

                Rectangle {
                    id: inner
                    anchors { fill: parent; margins: 10; }
                    color: "red"
                }
            }
        }
    }
    Button {
        anchors.bottom: parent.bottom;
        anchors.horizontalCenter: parent.horizontalCenter;
        text: "Scale flickArea"
        onClicked: {
            rect.scale += 0.2;
        }
    }
}

誰かがより良いものを提案できますか?

アップデート。 私はこの質問を1年間閉じませんでしたが、それでもより良い解決策やより良い方法は得られませんでした.

于 2013-11-11T16:32:56.640 に答える