You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

354 lines
13 KiB

/******************************************************************
Copyright © Deng Zhimao Co., Ltd. 1990-2030. All rights reserved.
* @projectName weather
* @brief Weatherwpage11.qml
* @author Deng Zhimao
* @email 1252699831@qq.com
* @date 2020-07-31
*******************************************************************/
import QtQuick 2.7
import QtQuick.Controls 2.2
import QtQuick.Window 2.3
import QtCharts 2.2
import an.weather 1.0
import an.model 1.0
Item {
id: w1
Connections{
target: myModel
onReadyChanged:{
if (myModel.ready)
refreshAnimation.restart();
}
}
NumberAnimation {
id: refreshAnimation
target: wpage1
property: "y"
duration: 200
from: wpage1.pullHeight
to: 0
easing.type: Easing.Linear
}
Flickable {
id: wpage1
anchors.fill: parent
interactive: true
contentWidth: smallScreen ? parent.width + 320 : parent.width
contentHeight: smallScreen ? parent.height + 208 : parent.height + 1
property int pullHeight: 20
states: [
State {
id: downRefreshState
name: "downRefresh"
when: wpage1.contentY < -wpage1.pullHeight
StateChangeScript{
script:{
print("下拉刷新")
wpage1.y = wpage1.pullHeight
myModel.downRefresh();
}
}
},
State {
when: wpage1.contentX > 400
StateChangeScript{
script:{
weatherSwipeView.setCurrentIndex(1)
print("进入页面二")
WeatherPage1.visible = false
WeatherPage2.visible = true
}
}
}
]
ScrollBar.vertical: ScrollBar {
visible: smallScreen ? true : false
id: scrollBarVertical1
z: 20
width: 5
hoverEnabled: true
background: Rectangle {color: "#33bbbbbb"}
onActiveChanged: {
active = true;
}
Component.onCompleted: {
scrollBarVertical1.active = true;
}
contentItem: Rectangle{
implicitWidth: 5
implicitHeight: 100
radius: 2
color: scrollBarVertical1.hovered ? "#25cfea" : "#88bbbbbb"
}
}
ScrollBar.horizontal: ScrollBar {
visible: smallScreen ? true : false
id: scrollBarHorizontal1
z: 20
height: 5
hoverEnabled: true
background: Rectangle {color: "#33bbbbbb"}
onActiveChanged: {
active = true;
}
Component.onCompleted: {
scrollBarHorizontal1.active = true;
}
contentItem: Rectangle{
implicitWidth: 100
implicitHeight: 5
radius: 2
color: scrollBarHorizontal1.hovered ? "#25cfea" : "#88bbbbbb"
}
}
Item {
id: content
anchors.fill: parent
Image {
id: location
width: 30
height: 30
source: "qrc:/weather/image/location.png"
anchors.right: city.left
anchors.rightMargin: 15
anchors.bottom: city.bottom
anchors.bottomMargin: -5
}
Text {
id: city
anchors.top: parent.top
anchors.topMargin: parent.height/3
anchors.left: cTemp.left
anchors.leftMargin: 30
font.pointSize: 25
font.family: "方正"
text: myModel.ready ? myModel.city : "载入中..."
color: "white"
}
Text {
id: updateMsg
anchors.horizontalCenter: city.horizontalCenter
anchors.top: city.bottom
anchors.topMargin: 5
font.pointSize: 8
font.family: "方正"
color: "#EEEEEE"
text: myModel.ready ? "天气数据已经更新" : "天气数据更新中...."
}
Text {
id: temperature
visible: false
anchors.horizontalCenter: updateMsg.horizontalCenter
anchors.top: cTemp.bottom
anchors.topMargin: 10
font.pointSize: 14
font.family: "方正"
text: myModel.ready ? myModel.weatherData[0].minTemperature
+ " ~ " + myModel.weatherData[0].maxTemperature + "℃": "载入中..."
color: "white"
}
Text {
id: cTemp
anchors.bottom: city.top
anchors.left: parent.horizontalCenter
anchors.leftMargin: 160
font.pointSize: 80
font.family: "方正"
color: "white"
text:myModel.ready ? myModel.cTemp + "°" : "..."
}
Rectangle {
anchors.bottom: city.top
anchors.bottomMargin: 5
anchors.left: location.left
anchors.right: city.right
height: 1
color: "#80eeeeee"
}
Text {
id: weatherType
anchors.top: weatherImage.bottom
anchors.horizontalCenter: weatherImage.horizontalCenter
anchors.leftMargin: 20
font.pointSize: 14
font.family: "方正"
color: "white"
text: myModel.ready ? myModel.weatherData[0].weather : "载入中..."
}
Image {
id: weatherImage
width: 150
height: 150
anchors.top: cTemp.bottom
anchors.topMargin: -50
anchors.right: parent.horizontalCenter
anchors.rightMargin: 200
mipmap: true
fillMode: Image.PreserveAspectFit
source: myModel.ready ? (dayOrNight >= 18 || dayOrNight <= 6 ? myModel.weatherData[0].nightPicture
: myModel.weatherData[0].dayPicture) : ""
}
Rectangle {
id: tipsRect
width:parent.width
clip: true
anchors.top: weatherType.bottom
anchors.topMargin: -30
height: 80
color: "transparent"
Text {
id: tipsText
visible: false
text: "温馨提示:"
anchors.left: tipsRect.left
anchors.leftMargin: 15
anchors.top: tipsRect.top
anchors.topMargin: 15
font.pointSize: 13
font.bold: true
font.family: "方正"
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
color: "#FC993C"
}
Flickable {
id: flickable2
anchors.left: tipsRect.left
anchors.leftMargin: 10
anchors.right: tipsRect.right
anchors.rightMargin: 10
anchors.top: tipsText.bottom
anchors.topMargin: 10
width: parent.width
height: parent.height
contentWidth: tipsView.contentWidth
contentHeight: tipsView.contentHeight
ListView {
id: tipsView
height: parent.width
width: parent.width
orientation: ListView.Horizontal
model: myModel.indexData
spacing: 20
delegate: Component {
Column {
Text {
id: descript
width: flickable2.width
text: modelData.descript
wrapMode: Text.Wrap
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
font.pointSize: 11
font.family: "方正"
color: "white"
}
}
}
}
}
}
Component {
id: delegate
Rectangle {
width: weatherDatabg.width/5 - 2
height: weatherDatabg.height - 2
color: "#33bbbbbb"
radius: 10
Text{
id: dateText
width: weatherDatabg.width/5
height: 20
font.family: "方正"
font.pointSize: 10
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
text: index != 0 ? date : "今日"
color: "white"
}
Text {
id: weatherText
width: weatherDatabg.width/5
height: 20
font.family: "方正"
font.pointSize: 10
anchors.top: dateText.bottom
anchors.topMargin: 5
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
text: myModel.ready ? weather : "未知"
color: "white"
}
Image {
id: dayAndNight
anchors.top: weatherText.bottom
anchors.topMargin: 2
width: weatherDatabg.width/5
height: 50
mipmap: true
fillMode: Image.PreserveAspectFit
source: myModel.ready ? (dayOrNight >= 18 || dayOrNight <= 6? nightPicture : dayPicture) : ""
}
Text {
id: temperatureText
width: weatherDatabg.width/5
height: 20
font.family: "方正"
font.pointSize: 10
anchors.top: dayAndNight.bottom
anchors.topMargin: 5
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
text: myModel.ready ? myModel.weatherData[index].minTemperature + " ~ " +
myModel.weatherData[index].maxTemperature + "℃" : "未知"
color: "white"
}
Text {
id: windText
width: weatherDatabg.width/5
height: 20
font.family: "方正"
font.pointSize: 10
anchors.top: temperatureText.bottom
anchors.topMargin: 5
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
text: myModel.ready ? wind : "未知"
color: "white"
}
}
}
Rectangle{
id: weatherDatabg
anchors.top: tipsRect.bottom
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
color: "transparent"
ListView {
id: futureWeather
width: contentWidth
orientation: ListView.Horizontal
anchors.fill: weatherDatabg
spacing: 2
model: myModel.weatherData
delegate: delegate
}
}
}
}
}