Files
work-secretfile-selfcheck/UmiOCR-data/qt_res/qml/Widgets/DoubleSwitchableLayout.qml

83 lines
2.7 KiB
QML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// =====================================================
// =============== 可切换左右/上下双栏布局 ===============
// =====================================================
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
}
}