Я пытаюсь сделать эквивалент стековой панели wpf, у меня уже была логика и я реализовал ее, но что-то не так с шириной, я не знаю, как создавать новые компоненты без привязки к петле ширины, вот мой StackPanel:
StackPanel.qml
import QtQuick 2.12
import QtQuick.Controls 2.12
import KiMa.Models 1.0
Item {
id:root
property var orientation : UOrientation.Horizontal
property int itemSpacing : 10
default property list<Item> pageData
Loader{
property var childs
anchors.fill: parent
id:loader
onChildsChanged: {
if(root.pageData != null){
for(var z = 0;z<root.pageData.length;++z){
root.pageData[z].parent = loader.childs
}
}
}
}
state: orientation == UOrientation.Horizontal ? "row": "col"
states: [
State {
name: "row"
PropertyChanges {
target: loader
sourceComponent : row
}
},
State{
name: "col"
PropertyChanges {
target: loader
sourceComponent : col
}
}
]
Component{
id:col
Column{
Component.onCompleted: {
childs = _col;
}
id:_col
width: parent.width
spacing: root.itemSpacing
}
}
Component{
id:row
Row{
Component.onCompleted: {
childs = _row
}
id:_row
width: parent.width
layoutDirection: Qt.RightToLeft
spacing: root.itemSpacing
}
}
}
и мое перечисление ориентации выглядит так:
#ifndef UORIENTATION_H
#define UORIENTATION_H
#include<QObject>
class UOrientation
{
Q_GADGET
public:
explicit UOrientation();
enum Orientation{
Horizontal,
Vertical
};
Q_ENUM(Orientation)
};
#endif // UORIENTATION_H
и пример использования должен быть таким:
StackPanel{
x: 320
height: 50
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: parent.bottom
anchors.bottomMargin: 25
Button{
}
Button{
}
}
вам нужно добавить это в main.cpp :
qmlRegisterUncreatableType<UOrientation>("KiMa.Models",1,0,"UOrientation","its not creatable type!");
Этот код работает, если у вас есть что предложить, чтобы я изменился, или вы думаете, что я допустил ошибку, дайте мне знать, единственная проблема, которую я вижу здесь, это привязка ширины.
Я уже пытался использовать childrenRect
, но он не работает :
width: childrenRect.width
height: childrenRect.height
Примечание : стекпанель, позволяющая вам укладывать элемент за элементом друг на друга, вы можете установить ориентацию по горизонтали или вертикали, чтобы в qt были столбец и строка вместе, что я уже сделал.
вертикальный:
горизонтальный: