C
Qt Quick Ultralite 温控器演示
/****************************************************************************** ** ** Copyright (C) 2023 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Quick Ultralite module. ** ** $QT_BEGIN_LICENSE:COMM$ ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see http://www.qt.io/terms-conditions. For further ** information use the contact form at http://www.qt.io/contact-us. ** ** $QT_END_LICENSE$ ** ******************************************************************************/import QtQuick 2.15 import Thermo 1.0 import QtQuickUltralite.Extras 2.0 import Benchmark 1.0 import QtQuickUltralite.Profiling Item { id: window width: Theme.screenWidth height: Theme.screenHeight function handleViewSwitched(selectedIndex : int) { bottomBar.selected = selectedIndex GlobalState.previousSelectedIndex = GlobalState.selectedIndex GlobalState.selectedIndex = selectedIndex } Image { id: topBarShadow source: "top-bar-shadow.png" anchors.top: topBar.bottom } Rectangle { id: centerBg color: "#F5F7F8" anchors.top: topBarShadow.bottom width: parent.width height: window.height - bottomBar.height - topBarShadow.height } TopBar { id: topBar width: parent.width height: Theme.topBarHeight z: 11 showBackButton: !GlobalState.showMain title: GlobalState.selectedRoom.name onBackClicked: { GlobalState.showMain = true } onSettingsClicked: { languageDialog.show() } } Item { id: mainItem width: parent.width anchors.top: topBar.bottom height: parent.height - topBar.height - bottomBar.height Loader { id: mainView anchors.fill: parent source: "../../PlacesView.qml" Connections { target: GlobalState function onShowMainChanged(showMain: bool) { if (GlobalState.showMain) { GlobalState.selectedIndex = 0 GlobalState.previousSelectedIndex = GlobalState.currentViewIndex GlobalState.selectedRoom.tempChanger.running = true mainItem.height = window.height - topBar.height - bottomBar.height } else { GlobalState.selectedIndex = 3 GlobalState.previousSelectedIndex = GlobalState.currentViewIndex GlobalState.selectedRoom.tempChanger.running = false mainItem.height = window.height - topBar.height } } function onLoadNext() { if (GlobalState.selectedIndex !== GlobalState.currentViewIndex) { switch(GlobalState.selectedIndex) { case 1: GlobalState.scheduleViewLoaded = false mainView.source = "../../ScheduleView.qml" break; case 2: mainView.source = "../../StatsView.qml" break; case 3: mainView.source = "../../RoomView.qml" break; default: GlobalState.placesLoaded = false mainView.source = "../../PlacesView.qml" } GlobalState.currentViewIndex = GlobalState.selectedIndex } } } } } BottomBar { id:bottomBar z: 10 // give precedence to bottom bar touch areas width: parent.width height: Theme.bottomBarHeight anchors.bottom: parent.bottom property int shift: !GlobalState.showMain ? -height : 0 visible: shift > -height Behavior on shift { NumberAnimation { } } anchors.bottomMargin: shift onViewSwitched: handleViewSwitched(index) } LanguageDialog { id: languageDialog anchors.fill: parent z: 11 } Component.onCompleted: { if(Qt.uiLanguage == "") { Qt.uiLanguage = "en_GB" } QulPerf.recording = true GlobalState.weatherStatusTimerEnable = false Rooms.livingRoom.tempChanger.running = false Rooms.diningRoom.tempChanger.running = false Rooms.garageRoom.tempChanger.running = false Rooms.kitchenRoom.tempChanger.running = false Rooms.kidsRoom.tempChanger.running = false Rooms.kids2Room.tempChanger.running = false Rooms.livingRoom.statusChanger.running = false Rooms.diningRoom.statusChanger.running = false Rooms.garageRoom.statusChanger.running = false Rooms.kitchenRoom.statusChanger.running = false Rooms.kidsRoom.statusChanger.running = false Rooms.kids2Room.statusChanger.running = false } property int simulationState: 0; property int repetitionCount: 0; property int flickDirection: 1; Timer { id: simulatorTimer interval: 100 running: true repeat: true onTriggered: { switch(simulationState) { case 0: repetitionCount = 0; bottomBar.viewSwitched(0); simulationState = 1; break; case 1: if(!FlickControl.running()) { FlickControl.startFlick(window.width/2, window.height/2, (flickDirection?1:-1) * 20, 0); flickDirection = 1 - flickDirection; if(++repetitionCount >= 16) { simulatorTimer.interval = 1000 simulationState = 2; bottomBar.viewSwitched(0); } } break; case 2: repetitionCount = 0; bottomBar.viewSwitched(1); simulatorTimer.interval = 300 simulationState = 3; break; case 3: if(++repetitionCount >= 8) { repetitionCount = 0; bottomBar.viewSwitched(2); simulatorTimer.interval = 100 simulationState = 4; } GlobalState.listViewIndex = repetitionCount; break; case 4: if(++repetitionCount >= 16) { repetitionCount = 0; bottomBar.viewSwitched(0); simulationState = 5; } GlobalState.statsContentViewIndex = 1 - GlobalState.statsContentViewIndex; break; case 5: simulationState = 0; break; default: break; } } } QulPerfOverlay { id: benchmarkResult anchors.horizontalCenter: parent.horizontalCenter; anchors.verticalCenter: parent.verticalCenter; visible: false } Timer { id: benchmarkTimer interval: 30000 running: true repeat: false onTriggered: { simulatorTimer.running = false QulPerf.recording = false mainItem.visible = false benchmarkResult.visible = true bottomBar.visible = false } } }