FluentUI/example/qml-Qt6/page/T_Home.qml

290 lines
9.2 KiB
QML
Raw Normal View History

2023-08-24 15:50:37 +08:00
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
2024-01-25 17:26:50 +08:00
import "../global"
2023-08-24 15:50:37 +08:00
FluScrollablePage{
launchMode: FluPageType.SingleTask
animDisabled: true
ListModel{
2024-03-09 15:35:48 +08:00
id: model_header
2023-08-24 15:50:37 +08:00
ListElement{
2024-03-09 15:35:48 +08:00
icon: "qrc:/example/res/image/ic_home_github.png"
title: qsTr("FluentUI GitHub")
desc: qsTr("The latest FluentUI controls and styles for your applications.")
url: "https://github.com/zhuzichu520/FluentUI"
clicked: function(model){
Qt.openUrlExternally(model.url)
}
}
ListElement{
icon: "qrc:/example/res/image/favicon.ico"
title: qsTr("FluentUI Initalizr")
desc: qsTr("FluentUI Initializr is a FluentUI tool that helps you create and customize Fluent UI projects with various options.")
url: "https://github.com/zhuzichu520/FluentUI"
clicked: function(model){
FluApp.navigate("/fluentInitalizr")
}
2023-08-24 15:50:37 +08:00
}
}
Item{
Layout.fillWidth: true
Layout.preferredHeight: 320
Image {
id: bg
fillMode:Image.PreserveAspectCrop
anchors.fill: parent
verticalAlignment: Qt.AlignTop
2023-09-06 22:52:48 +08:00
sourceSize: Qt.size(960,640)
2023-08-24 15:50:37 +08:00
source: "qrc:/example/res/image/bg_home_header.png"
}
Rectangle{
anchors.fill: parent
gradient: Gradient{
GradientStop { position: 0.8; color: FluTheme.dark ? Qt.rgba(0,0,0,0) : Qt.rgba(1,1,1,0) }
GradientStop { position: 1.0; color: FluTheme.dark ? Qt.rgba(0,0,0,1) : Qt.rgba(1,1,1,1) }
}
}
FluText{
text:"FluentUI Gallery"
font: FluTextStyle.TitleLarge
anchors{
top: parent.top
left: parent.left
topMargin: 20
leftMargin: 20
}
}
2023-09-17 20:36:33 +08:00
Component{
id:com_grallery
Item{
2023-08-24 15:50:37 +08:00
id: control
width: 220
height: 240
FluShadow{
2023-09-08 22:33:23 +08:00
radius:5
2023-08-24 15:50:37 +08:00
anchors.fill: item_content
}
2023-09-17 20:36:33 +08:00
FluClip{
2023-08-24 15:50:37 +08:00
id:item_content
2023-09-08 22:33:23 +08:00
radius: [5,5,5,5]
2023-08-24 15:50:37 +08:00
width: 200
height: 220
anchors.centerIn: parent
FluAcrylic{
anchors.fill: parent
tintColor: FluTheme.dark ? Qt.rgba(0,0,0,1) : Qt.rgba(1,1,1,1)
target: bg
tintOpacity: FluTheme.dark ? 0.8 : 0.9
blurRadius : 40
targetRect: Qt.rect(list.x-list.contentX+10+(control.width)*index,list.y+10,width,height)
}
Rectangle{
anchors.fill: parent
2023-09-08 22:33:23 +08:00
radius: 5
2023-11-02 15:33:59 +08:00
color:FluTheme.itemHoverColor
2023-09-17 20:36:33 +08:00
visible: item_mouse.containsMouse
}
Rectangle{
anchors.fill: parent
radius: 5
color:Qt.rgba(0,0,0,0.0)
visible: !item_mouse.containsMouse
2023-08-24 15:50:37 +08:00
}
ColumnLayout{
Image {
Layout.topMargin: 20
Layout.leftMargin: 20
Layout.preferredWidth: 50
Layout.preferredHeight: 50
source: model.icon
}
FluText{
text: model.title
font: FluTextStyle.Body
Layout.topMargin: 20
Layout.leftMargin: 20
}
FluText{
text: model.desc
Layout.topMargin: 5
Layout.preferredWidth: 160
Layout.leftMargin: 20
color: FluColors.Grey120
font.pixelSize: 12
2024-03-09 15:35:48 +08:00
wrapMode: Text.WordWrap
2023-08-24 15:50:37 +08:00
}
}
FluIcon{
iconSource: FluentIcons.OpenInNewWindow
iconSize: 15
anchors{
bottom: parent.bottom
right: parent.right
rightMargin: 10
bottomMargin: 10
}
}
MouseArea{
id:item_mouse
anchors.fill: parent
hoverEnabled: true
onWheel:
(wheel)=>{
if (wheel.angleDelta.y > 0) scrollbar_header.decrease()
else scrollbar_header.increase()
}
onClicked: {
2024-03-09 15:35:48 +08:00
model.clicked(model)
2023-08-24 15:50:37 +08:00
}
}
}
}
}
2023-09-17 20:36:33 +08:00
ListView{
id: list
anchors{
left: parent.left
right: parent.right
bottom: parent.bottom
}
orientation: ListView.Horizontal
height: 240
model: model_header
header: Item{height: 10;width: 10}
footer: Item{height: 10;width: 10}
ScrollBar.horizontal: FluScrollBar{
id: scrollbar_header
}
clip: false
delegate: com_grallery
}
2023-08-24 15:50:37 +08:00
}
Component{
id:com_item
Item{
2023-12-20 17:17:41 +08:00
property string desc: modelData.extra.desc
2023-08-24 15:50:37 +08:00
width: 320
height: 120
FluArea{
radius: 8
width: 300
height: 100
anchors.centerIn: parent
Rectangle{
anchors.fill: parent
radius: 8
color:{
2023-11-02 15:33:59 +08:00
if(item_mouse.containsMouse){
return FluTheme.itemHoverColor
2023-08-24 15:50:37 +08:00
}
2023-11-02 15:33:59 +08:00
return FluTheme.itemNormalColor
2023-08-24 15:50:37 +08:00
}
}
Image{
id:item_icon
height: 40
width: 40
2023-12-20 17:17:41 +08:00
source: modelData.extra.image
2023-08-24 15:50:37 +08:00
anchors{
left: parent.left
leftMargin: 20
verticalCenter: parent.verticalCenter
}
}
FluText{
id:item_title
text:modelData.title
font: FluTextStyle.BodyStrong
anchors{
left: item_icon.right
leftMargin: 20
top: item_icon.top
}
}
FluText{
id:item_desc
2023-09-17 20:36:33 +08:00
text:desc
2023-08-24 15:50:37 +08:00
color:FluColors.Grey120
2024-03-09 15:35:48 +08:00
wrapMode: Text.WordWrap
2023-08-24 15:50:37 +08:00
elide: Text.ElideRight
font: FluTextStyle.Caption
maximumLineCount: 2
anchors{
left: item_title.left
right: parent.right
rightMargin: 20
top: item_title.bottom
topMargin: 5
}
}
Rectangle{
height: 12
width: 12
radius: 6
2023-11-02 15:33:59 +08:00
color: FluTheme.primaryColor
2023-08-24 15:50:37 +08:00
anchors{
right: parent.right
top: parent.top
rightMargin: 14
topMargin: 14
}
}
MouseArea{
id:item_mouse
anchors.fill: parent
hoverEnabled: true
onClicked: {
ItemsOriginal.startPageByItem(modelData)
}
}
}
}
}
FluText{
text: "Recently added samples"
font: FluTextStyle.Title
Layout.topMargin: 20
Layout.leftMargin: 20
}
GridView{
Layout.fillWidth: true
Layout.preferredHeight: contentHeight
cellHeight: 120
cellWidth: 320
model:ItemsOriginal.getRecentlyAddedData()
interactive: false
delegate: com_item
}
FluText{
text: "Recently updated samples"
font: FluTextStyle.Title
Layout.topMargin: 20
Layout.leftMargin: 20
}
GridView{
Layout.fillWidth: true
Layout.preferredHeight: contentHeight
cellHeight: 120
cellWidth: 320
interactive: false
model: ItemsOriginal.getRecentlyUpdatedData()
delegate: com_item
}
}