アニメーションアコーディオンのような要素を作成して、クリック時に拡大したいと考えています。それがうまくいくはずです。QtQuick/QMLでアニメーション化された可変サイズのアコーディオンコンポーネントを作成する方法
ユーザが赤色の長方形の一方、実際のコンテンツである緑色の四角形をクリックすると、展開しなければなりません。この拡張をアニメーション化したい。緑色の長方形の内容の高さは、赤いヘッダーごとに異なる場合があります。
私はClick-to-Expandの動作を実装できましたが、アニメーションはありません。ここに私は現在持っているコードです。
AccordionElement.qml
import QtQuick 2.5
import QtQuick.Layouts 1.1
ColumnLayout {
id: rootElement
property string title: ""
property bool isOpen: false
default property alias accordionContent: contentPlaceholder.data
anchors.left: parent.left; anchors.right: parent.right
// Header element
Rectangle {
id: accordionHeader
color: "red"
anchors.left: parent.left; anchors.right: parent.right
height: 50
MouseArea {
anchors.fill: parent
Text {
text: rootElement.title
anchors.centerIn: parent
}
cursorShape: Qt.PointingHandCursor
onClicked: {
rootElement.isOpen = !rootElement.isOpen
}
}
}
// This will get filled with the content
ColumnLayout {
id: contentPlaceholder
visible: rootElement.isOpen
anchors.left: parent.left; anchors.right: parent.right
}
}
そして、これは、それが親要素から使用されている方法です。
Accordion.qml
ColumnLayout {
Layout.margins: 5
visible: true
AccordionElement {
title: "Title1"
accordionContent: Rectangle {
anchors.left: parent.left; anchors.right: parent.right
height: 20
color: "green"
}
}
AccordionElement {
title: "Title2"
accordionContent: Rectangle {
anchors.left: parent.left; anchors.right: parent.right
height: 50
color: "green"
}
}
AccordionElement {
title: "Title3"
accordionContent: Rectangle {
anchors.left: parent.left; anchors.right: parent.right
height: 30
color: "green"
}
}
// Vertical spacer to keep the rectangles in upper part of column
Item {
Layout.fillHeight: true
}
}
これは、(すべての矩形が展開されている)は、次の結果を生成します。
理想的には、赤い四角形(プリンタの用紙など)から緑色の四角形が外に出るようにします。しかし、私はこれを行う方法に立ち往生しています。 height
プロパティを使用していくつかの方法を試しましたが、緑色の矩形が消えますが、赤色の矩形の下に空白が残ります。
ご協力いただければ幸いです。私が行方不明のアプローチはありますか?ここで
私が 'ColumnLayout'は私に多くの問題を引き起こしたと思われます。それは私の最初のQMLプロジェクトであり、Androidのバックグラウンドから来ているので、いくつか混乱することがあります。 –
レイアウトでも、アンカーでもかまいません。私はあなたのコードをテストしなかった。より複雑なものを投げ込むと、それはしばしば期待や常識にも合致しないため、QMLでは単純なままにすることが重要です。 – dtech
'anchors.left:parent.left; anchors.right:parent.right'という行を意味する場合、それは要素を親に合うように水平に伸ばすので問題にはなりません。 QMLについて、私はそれが本当に好きではありません。 GUIをデザインするのにHTML、CSS、JSを使う方が好きですが、このプロジェクトにはQMLを使わなければなりません。 –