83 lines
2.7 KiB
QML
83 lines
2.7 KiB
QML
// =====================================================
|
||
// =============== 可切换左右/上下双栏布局 ===============
|
||
// =====================================================
|
||
|
||
import QtQuick 2.15
|
||
import QtQuick.Controls 2.15
|
||
import QtQuick.Layouts 1.15
|
||
|
||
Item {
|
||
|
||
// ========================= 【可调参数】 =========================
|
||
|
||
property QtObject itemA // 第一子组件,左或上
|
||
property QtObject itemB // 第二子组件,右或下
|
||
property bool isRow: true // t为左右布局,f为上下
|
||
property string saveKey: "" // 如果非空,则缓存 isRow 和布局的 hide 参数。
|
||
// 只读:0为不隐藏,1为隐藏第一子组件,2为隐藏第二子组件
|
||
property int hideAB: 0
|
||
|
||
id: doubleLayout
|
||
|
||
Component.onCompleted: {
|
||
// 取 isRow 缓存
|
||
Qt.callLater(() => {
|
||
if(doubleLayout.saveKey) {
|
||
const layoutDict = qmlapp.globalConfigs.getValue("window.doubleLayout")
|
||
const f = layoutDict[doubleLayout.saveKey]
|
||
if(f === true || f === false) isRow = f // bool类型合法性检查
|
||
}
|
||
})
|
||
}
|
||
|
||
// 切换布局
|
||
function toSwitchView(toRow) { // isRow 要变为的值
|
||
isRow = toRow
|
||
hideAB = doubleLayout.isRow ? rowLayout.hideLR : columnLayout.hideTB
|
||
// 缓存 isRow
|
||
if(doubleLayout.saveKey) {
|
||
let layoutDict = qmlapp.globalConfigs.getValue("window.doubleLayout")
|
||
layoutDict[doubleLayout.saveKey] = toRow
|
||
qmlapp.globalConfigs.setValue("window.doubleLayout", layoutDict)
|
||
}
|
||
}
|
||
|
||
// 左右布局
|
||
DoubleRowLayout {
|
||
id: rowLayout
|
||
anchors.fill: parent
|
||
visible: doubleLayout.isRow
|
||
leftItem: doubleLayout.isRow ? itemA : placeholderA
|
||
rightItem: doubleLayout.isRow ? itemB : placeholderB
|
||
isShowSplitView: true
|
||
saveKey: doubleLayout.saveKey==="" ? "" : doubleLayout.saveKey+"row"
|
||
onSwitchView: toSwitchView(false)
|
||
onHideLRChanged: {
|
||
if(doubleLayout.isRow) doubleLayout.hideAB = hideLR
|
||
}
|
||
}
|
||
// 上下布局
|
||
DoubleColumnLayout {
|
||
id: columnLayout
|
||
anchors.fill: parent
|
||
visible: !doubleLayout.isRow
|
||
topItem: doubleLayout.isRow ? placeholderA : itemA
|
||
bottomItem: doubleLayout.isRow ? placeholderB : itemB
|
||
isShowSplitView: true
|
||
saveKey: doubleLayout.saveKey==="" ? "" : doubleLayout.saveKey+"col"
|
||
onSwitchView: toSwitchView(true)
|
||
onHideTBChanged: {
|
||
if(!doubleLayout.isRow) doubleLayout.hideAB = hideTB
|
||
}
|
||
}
|
||
|
||
// 临时占位用子组件
|
||
Item {
|
||
id: placeholderA
|
||
visible: false
|
||
}
|
||
Item {
|
||
id: placeholderB
|
||
visible: false
|
||
}
|
||
} |