Files
work-secretfile-selfcheck/UmiOCR-data/qt_res/qml/Main.qml

147 lines
5.1 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.Window 2.15
import QtQuick.Controls 2.15
import QtGraphicalEffects 1.15
import Qt.labs.settings 1.1
import MissionConnector 1.0 // Python任务连接器
import KeyMouseConnector 1.0 // 键盘/鼠标连接器
import UtilsConnector 1.0 // 通用连接器
import "Themes"
import "TabView_"
import "Configs"
import "EventBus"
import "Popup_"
import "MainWindow"
import "ImageManager"
Window {
id: mainWindowRoot
visibility: Window.Hidden // 在 MainWindowManager 中启用可见性
// 窗口 | 自定义标题栏 | 有标题 | 有系统菜单 | 有最小最大化按钮 | 有关闭按钮 | 根据条件是否置顶
property bool isMainWindowTop: false
flags: Qt.Window | Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowSystemMenuHint
| Qt.WindowMinMaxButtonsHint | Qt.WindowCloseButtonHint | (isMainWindowTop?Qt.WindowStaysOnTopHint:0)
width: 800
height: 500
minimumWidth: 300
minimumHeight: 300
color: "#00000000"
title: UmiAbout.fullname
// ========================= 【控制】 =========================
// 全局样式,通过 theme 来访问
property Theme theme: Theme{}
// 全局尺寸,通过 size_ 来访问
property Size_ size_: Size_{}
// 全局单例,通过 qmlapp. 来访问
Item {
id: qmlapp
// 普通全局单例
TabViewManager { id: tab } // 标签页逻辑管理器
ImageManager { id: imageManager } // 图片管理器
MissionConnector { id: msnConnector } // 任务连接器
PubSub { id: pubSub } // 全局事件发布/订阅
KeyMouseConnector { id:keyMouse } // 鼠标/键盘
UtilsConnector { id:utilsConnector } // 通用连接器
AsynFilesLoader { id:asynFilesLoader } // 异步文件加载器
// 必须先初始化的单例onCompleted顺序从下往上
MainWindowManager { id:mainWin; mainWin:mainWindowRoot } // 主窗管理
SystemTray { id:systemTray } // 系统托盘
PopupManager { id: popup } // 弹窗管理器
GlobalConfigs { id: globalConfigs } // 全局设置
property alias asynFilesLoader: asynFilesLoader
property alias imageManager: imageManager
property alias globalConfigs: globalConfigs
property alias tab: tab
property alias popup: popup
property alias msnConnector: msnConnector
property alias pubSub: pubSub
property alias keyMouse: keyMouse
property alias utilsConnector: utilsConnector
property alias systemTray: systemTray
property alias mainWin: mainWin
property bool enabledEffect: false // 全局是否启用动画
Component.onCompleted: {
// 延时加载标签页
Qt.callLater(()=>{
qmlapp.tab.init()
})
}
}
onClosing: { // 窗口关闭事件
close.accepted = false // 阻止原生事件
mainWin.close() // 调用主窗管理器的关闭
}
// ========================= 【布局】 =========================
// 主窗口的容器,兼做边框
Rectangle {
id: mainContainer
anchors.fill: parent
color: "#00000000"
radius: size_.windowRadius // 窗口圆角
focus: true
// Esc 关闭窗口
Keys.enabled: true
Keys.onEscapePressed: {
// 如果设置了关闭窗口后隐藏到托盘区,则关闭窗口
if(qmlapp.globalConfigs.getValue("window.closeWin2Hide")) {
mainWindowRoot.visibility = Window.Hidden
}
// 否则,最小化窗口,以兼容没有托盘区的平台
else {
mainWindowRoot.visibility = Window.Minimized
}
// TODO Deiban 平台测试!
}
// 为了防止主窗启动不显示时内容的宽度初始值为0先让内容挂到固定宽度的Item下
Item {
width: 800
height: 500
property alias mainWidth: mainContainer.width
onMainWidthChanged: { // 主窗恢复显示时,再让内容挂回主窗
if(mainUI.parent !== mainContainer)
mainUI.parent = mainContainer
}
// 主窗口的内容
Rectangle {
id: mainUI
anchors.fill: parent
anchors.margins: 0 // 透明边框宽度
color: theme.bgColor // 整个窗口的背景颜色
radius: size_.windowRadius // 窗口圆角
// 标签视图
TabView_ { }
// 裁切子元素,并应用圆角
layer.enabled: true
layer.effect: OpacityMask {
maskSource: Rectangle {
width: mainUI.width
height: mainUI.height
radius: size_.windowRadius
}
}
}
}
}
}