mirror of
https://github.com/zhuzichu520/FluentUI.git
synced 2024-11-26 21:37:04 +08:00
update
This commit is contained in:
parent
b83e70ba24
commit
5fcd95611f
@ -14,6 +14,37 @@ FluScrollablePage{
|
|||||||
text:"支持Tab键切换焦点,空格键执行点击事件"
|
text:"支持Tab键切换焦点,空格键执行点击事件"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
width: parent.width
|
||||||
|
height: 68
|
||||||
|
paddings: 10
|
||||||
|
|
||||||
|
FluTextButton{
|
||||||
|
disabled:text_button_switch.selected
|
||||||
|
text:"Text Button"
|
||||||
|
onClicked: {
|
||||||
|
showInfo("点击Text Button")
|
||||||
|
}
|
||||||
|
anchors{
|
||||||
|
verticalCenter: parent.verticalCenter
|
||||||
|
left: parent.left
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Row{
|
||||||
|
spacing: 5
|
||||||
|
anchors{
|
||||||
|
verticalCenter: parent.verticalCenter
|
||||||
|
right: parent.right
|
||||||
|
}
|
||||||
|
FluToggleSwitch{
|
||||||
|
id:text_button_switch
|
||||||
|
Layout.alignment: Qt.AlignRight
|
||||||
|
text:"Disabled"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
FluArea{
|
FluArea{
|
||||||
width: parent.width
|
width: parent.width
|
||||||
height: 68
|
height: 68
|
||||||
|
27
example/T_Calender.qml
Normal file
27
example/T_Calender.qml
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import QtQuick 2.15
|
||||||
|
import QtQuick.Controls 2.15
|
||||||
|
import QtQuick.Layouts 1.15
|
||||||
|
import QtQuick.Window 2.15
|
||||||
|
import QtGraphicalEffects 1.15
|
||||||
|
import FluentUI 1.0
|
||||||
|
|
||||||
|
FluScrollablePage{
|
||||||
|
|
||||||
|
title:"Calender"
|
||||||
|
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
width: parent.width
|
||||||
|
Layout.topMargin: 20
|
||||||
|
height: 400
|
||||||
|
paddings: 10
|
||||||
|
|
||||||
|
|
||||||
|
FluCalenderView{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -34,7 +34,7 @@ FluWindow {
|
|||||||
fontStyle: FluText.Title
|
fontStyle: FluText.Title
|
||||||
}
|
}
|
||||||
FluText{
|
FluText{
|
||||||
text:"v1.1.1"
|
text:"v1.1.2"
|
||||||
fontStyle: FluText.Body
|
fontStyle: FluText.Body
|
||||||
Layout.alignment: Qt.AlignBottom
|
Layout.alignment: Qt.AlignBottom
|
||||||
}
|
}
|
||||||
|
@ -90,6 +90,13 @@ FluWindow {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FluPaneItem{
|
||||||
|
title:"Calender"
|
||||||
|
onTap:{
|
||||||
|
nav_view.push("qrc:/T_Calender.qml")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Badge"
|
title:"Badge"
|
||||||
onTap:{
|
onTap:{
|
||||||
|
@ -42,5 +42,6 @@
|
|||||||
<file>page/ChatPage.qml</file>
|
<file>page/ChatPage.qml</file>
|
||||||
<file>T_Tooltip.qml</file>
|
<file>T_Tooltip.qml</file>
|
||||||
<file>T_Badge.qml</file>
|
<file>T_Badge.qml</file>
|
||||||
|
<file>T_Calender.qml</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
@ -1,5 +1,331 @@
|
|||||||
import QtQuick 2.15
|
import QtQuick 2.15
|
||||||
|
import QtQuick.Controls 2.15
|
||||||
|
import FluentUI 1.0
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
|
|
||||||
|
id:control
|
||||||
|
property int displayMode: FluCalenderView.Month
|
||||||
|
|
||||||
|
property var date: new Date()
|
||||||
|
|
||||||
|
property var currentDate : new Date()
|
||||||
|
|
||||||
|
enum DisplayMode {
|
||||||
|
Month,
|
||||||
|
Year,
|
||||||
|
Decade
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
updateMouth(date)
|
||||||
|
}
|
||||||
|
|
||||||
|
function createItemWeek(name){
|
||||||
|
return {type:0,name:name}
|
||||||
|
}
|
||||||
|
|
||||||
|
function createItemDay(date){
|
||||||
|
return {type:1,date:date}
|
||||||
|
}
|
||||||
|
|
||||||
|
function createItemMonth(name){
|
||||||
|
return {type:2,name:name}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function updateYear(data){
|
||||||
|
list_model.clear()
|
||||||
|
var year = date.getFullYear()
|
||||||
|
var month = date.getMonth()
|
||||||
|
var nextMonthYear = year
|
||||||
|
var nextMonth = month + 1
|
||||||
|
if (month === 11) {
|
||||||
|
nextMonthYear = year + 1
|
||||||
|
nextMonth = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
for(var i = 0 ; i< 12 ;i++){
|
||||||
|
list_model.append(createItemMonth((i+1)+"月"));
|
||||||
|
}
|
||||||
|
list_model.append(createItemMonth("1月"));
|
||||||
|
list_model.append(createItemMonth("2月"));
|
||||||
|
list_model.append(createItemMonth("3月"));
|
||||||
|
list_model.append(createItemMonth("4月"));
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateMouth(date){
|
||||||
|
list_model.clear()
|
||||||
|
list_model.append([createItemWeek("一"),createItemWeek("二"),createItemWeek("三"),createItemWeek("四"),createItemWeek("五"),createItemWeek("六"),createItemWeek("日")])
|
||||||
|
var year = date.getFullYear()
|
||||||
|
var month = date.getMonth()
|
||||||
|
var day = date.getDate()
|
||||||
|
var firstDayOfMonth = new Date(year, month, 1)
|
||||||
|
var dayOfWeek = firstDayOfMonth.getDay()
|
||||||
|
var headerSize = (dayOfWeek===0?7:dayOfWeek)-1
|
||||||
|
if(headerSize!==0){
|
||||||
|
var lastMonthYear = year;
|
||||||
|
var lastMonthMonth = month - 1
|
||||||
|
if (month === 0) {
|
||||||
|
lastMonthYear = year - 1
|
||||||
|
lastMonthMonth = 11
|
||||||
|
}
|
||||||
|
var lastMonthDays = new Date(lastMonthYear, lastMonthMonth+1, 0).getDate()
|
||||||
|
for (var i = headerSize-1; i >= 0; i--) {
|
||||||
|
list_model.append(createItemDay(new Date(lastMonthYear, lastMonthMonth,lastMonthDays-i)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const lastDayOfMonth = new Date(year, month+1, 0).getDate()
|
||||||
|
for (let day = 1; day <= lastDayOfMonth; day++) {
|
||||||
|
list_model.append(createItemDay(new Date(year, month,day)))
|
||||||
|
}
|
||||||
|
var footerSize = 49-list_model.count
|
||||||
|
var nextMonthYear = year
|
||||||
|
var nextMonth = month + 1
|
||||||
|
if (month === 11) {
|
||||||
|
nextMonthYear = year + 1
|
||||||
|
nextMonth = 0
|
||||||
|
}
|
||||||
|
const nextDayOfMonth = new Date(nextMonthYear, nextMonth+1, 0).getDate()
|
||||||
|
for (let j = 1; j <= nextDayOfMonth; j++) {
|
||||||
|
list_model.append(createItemDay(new Date(nextMonthYear, nextMonth,j)))
|
||||||
|
}
|
||||||
|
title.text = year+"年"+(month+1)+"月"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Component{
|
||||||
|
id:com_week
|
||||||
|
Item{
|
||||||
|
height: 40
|
||||||
|
width: 40
|
||||||
|
FluText{
|
||||||
|
text:name
|
||||||
|
anchors.centerIn: parent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component{
|
||||||
|
id:com_month
|
||||||
|
Item{
|
||||||
|
// property bool isYear: control.date.getFullYear() === date.getFullYear()
|
||||||
|
// property bool isMonth: control.currentDate.getFullYear() === date.getFullYear() && control.currentDate.getMonth()
|
||||||
|
height: 70
|
||||||
|
width: 70
|
||||||
|
|
||||||
|
Rectangle{
|
||||||
|
id:backgound_selected
|
||||||
|
anchors.centerIn: parent
|
||||||
|
width: 50
|
||||||
|
height: 50
|
||||||
|
radius: 25
|
||||||
|
visible: false
|
||||||
|
color: FluTheme.primaryColor.dark
|
||||||
|
}
|
||||||
|
|
||||||
|
FluText{
|
||||||
|
text:name
|
||||||
|
anchors.centerIn: parent
|
||||||
|
color: {
|
||||||
|
// if(isMonth){
|
||||||
|
// return "#FFFFFF"
|
||||||
|
// }
|
||||||
|
// if(isYear){
|
||||||
|
// return FluTheme.isDark ? "#FFFFFF" : "#1A1A1A"
|
||||||
|
// }
|
||||||
|
return Qt.rgba(150/255,150/255,150/255,1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Component{
|
||||||
|
id:com_day
|
||||||
|
Button{
|
||||||
|
id:item_control
|
||||||
|
property bool isMonth: control.date.getMonth() === date.getMonth()
|
||||||
|
property bool isDay: control.currentDate.getFullYear() === date.getFullYear() && control.currentDate.getMonth() === date.getMonth() && control.currentDate.getDate() === date.getDate()
|
||||||
|
height: 40
|
||||||
|
width: 40
|
||||||
|
onClicked: {
|
||||||
|
currentDate = date
|
||||||
|
}
|
||||||
|
background: Item{
|
||||||
|
Rectangle{
|
||||||
|
width: 36
|
||||||
|
height: 36
|
||||||
|
radius: 4
|
||||||
|
anchors.centerIn: parent
|
||||||
|
color:{
|
||||||
|
if(FluTheme.isDark){
|
||||||
|
if(item_control.hovered){
|
||||||
|
return Qt.rgba(1,1,1,0.05)
|
||||||
|
}
|
||||||
|
return Qt.rgba(0,0,0,0)
|
||||||
|
}else{
|
||||||
|
if(item_control.hovered){
|
||||||
|
return Qt.rgba(0,0,0,0.05)
|
||||||
|
}
|
||||||
|
return Qt.rgba(0,0,0,0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Rectangle{
|
||||||
|
id:backgound_selected
|
||||||
|
anchors.centerIn: parent
|
||||||
|
width: 30
|
||||||
|
height: 30
|
||||||
|
radius: 15
|
||||||
|
visible: isDay
|
||||||
|
color: FluTheme.primaryColor.dark
|
||||||
|
}
|
||||||
|
FluText{
|
||||||
|
text:date.getDate()
|
||||||
|
anchors.centerIn: parent
|
||||||
|
color: {
|
||||||
|
if(isDay){
|
||||||
|
return "#FFFFFF"
|
||||||
|
}
|
||||||
|
if(isMonth){
|
||||||
|
return FluTheme.isDark ? "#FFFFFF" : "#1A1A1A"
|
||||||
|
}
|
||||||
|
return Qt.rgba(150/255,150/255,150/255,1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
contentItem: Item{}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
width: 280
|
||||||
|
height: 325
|
||||||
|
radius: 5
|
||||||
|
|
||||||
|
FluShadow{
|
||||||
|
radius: 5
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle{
|
||||||
|
id:layout_divider
|
||||||
|
height: 1
|
||||||
|
width: parent.width
|
||||||
|
color: FluTheme.isDark ? Qt.rgba(45/255,45/255,45/255,1) : Qt.rgba(226/255,229/255,234/255,1)
|
||||||
|
anchors{
|
||||||
|
top: parent.top
|
||||||
|
topMargin: 45
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Item{
|
||||||
|
id:layout_top
|
||||||
|
anchors{
|
||||||
|
left: parent.left
|
||||||
|
right: parent.right
|
||||||
|
top: parent.top
|
||||||
|
bottom: layout_divider.top
|
||||||
|
}
|
||||||
|
|
||||||
|
FluTextButton{
|
||||||
|
id:title
|
||||||
|
leftPadding: 0
|
||||||
|
rightPadding: 0
|
||||||
|
anchors{
|
||||||
|
verticalCenter: parent.verticalCenter
|
||||||
|
left: parent.left
|
||||||
|
leftMargin: 14
|
||||||
|
}
|
||||||
|
onClicked:{
|
||||||
|
displayMode = FluCalenderView.Year
|
||||||
|
updateYear(data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluIconButton{
|
||||||
|
id:icon_up
|
||||||
|
iconSource: FluentIcons.CaretUpSolid8
|
||||||
|
iconSize: 10
|
||||||
|
anchors{
|
||||||
|
verticalCenter: parent.verticalCenter
|
||||||
|
right: icon_down.left
|
||||||
|
rightMargin: 14
|
||||||
|
}
|
||||||
|
onClicked: {
|
||||||
|
var year = date.getFullYear()
|
||||||
|
var month = date.getMonth()
|
||||||
|
var lastMonthYear = year;
|
||||||
|
var lastMonthMonth = month - 1
|
||||||
|
if (month === 0) {
|
||||||
|
lastMonthYear = year - 1
|
||||||
|
lastMonthMonth = 11
|
||||||
|
}
|
||||||
|
date = new Date(lastMonthYear,lastMonthMonth,1)
|
||||||
|
updateMouth(date)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluIconButton{
|
||||||
|
id:icon_down
|
||||||
|
iconSource: FluentIcons.CaretDownSolid8
|
||||||
|
iconSize: 10
|
||||||
|
anchors{
|
||||||
|
verticalCenter: parent.verticalCenter
|
||||||
|
right: parent.right
|
||||||
|
rightMargin: 8
|
||||||
|
}
|
||||||
|
onClicked: {
|
||||||
|
var year = date.getFullYear()
|
||||||
|
var month = date.getMonth()
|
||||||
|
var nextMonthYear = year
|
||||||
|
var nextMonth = month + 1
|
||||||
|
if (month === 11) {
|
||||||
|
nextMonthYear = year + 1
|
||||||
|
nextMonth = 0
|
||||||
|
}
|
||||||
|
date = new Date(nextMonthYear,nextMonth,1)
|
||||||
|
updateMouth(date)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ListModel {
|
||||||
|
id:list_model
|
||||||
|
}
|
||||||
|
|
||||||
|
Item{
|
||||||
|
id:layout_bottom
|
||||||
|
anchors{
|
||||||
|
left: parent.left
|
||||||
|
right: parent.right
|
||||||
|
top: layout_divider.bottom
|
||||||
|
bottom: parent.bottom
|
||||||
|
}
|
||||||
|
|
||||||
|
GridView{
|
||||||
|
model: list_model
|
||||||
|
anchors.fill: parent
|
||||||
|
cellHeight: displayMode === FluCalenderView.Month ? 40 : 70
|
||||||
|
cellWidth: displayMode === FluCalenderView.Month ? 40 : 70
|
||||||
|
delegate: Loader{
|
||||||
|
property var modelData : model
|
||||||
|
property var name : model.name
|
||||||
|
property var date : model.date
|
||||||
|
sourceComponent: {
|
||||||
|
if(model.type === 0){
|
||||||
|
return com_week
|
||||||
|
}
|
||||||
|
if(model.type === 1){
|
||||||
|
return com_day
|
||||||
|
}
|
||||||
|
if(model.type === 2){
|
||||||
|
return com_month
|
||||||
|
}
|
||||||
|
return com_day
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,22 +1,44 @@
|
|||||||
import QtQuick 2.15
|
import QtQuick 2.15
|
||||||
|
import QtQuick.Controls 2.15
|
||||||
import FluentUI 1.0
|
import FluentUI 1.0
|
||||||
|
|
||||||
FluText {
|
Button {
|
||||||
id:root
|
|
||||||
color: {
|
property bool disabled: false
|
||||||
if(FluTheme.isDark){
|
|
||||||
return mouse_area.containsMouse?Qt.darker(FluTheme.primaryColor.lighter,1.1):FluTheme.primaryColor.lighter
|
property color normalColor: FluTheme.isDark ? FluTheme.primaryColor.lighter : FluTheme.primaryColor.dark
|
||||||
|
property color hoverColor: FluTheme.isDark ? Qt.darker(normalColor,1.3) : Qt.lighter(normalColor,1.3)
|
||||||
|
property color disableColor: FluTheme.isDark ? Qt.rgba(82/255,82/255,82/255,1) : Qt.rgba(199/255,199/255,199/255,1)
|
||||||
|
property bool textBold: true
|
||||||
|
|
||||||
|
id: control
|
||||||
|
topPadding:5
|
||||||
|
bottomPadding:5
|
||||||
|
leftPadding:15
|
||||||
|
rightPadding:15
|
||||||
|
enabled: !disabled
|
||||||
|
focusPolicy:Qt.TabFocus
|
||||||
|
|
||||||
|
Keys.onSpacePressed: control.visualFocus&&clicked()
|
||||||
|
|
||||||
|
background: Item{
|
||||||
|
FluFocusRectangle{
|
||||||
|
visible: control.visualFocus
|
||||||
|
radius:8
|
||||||
}
|
}
|
||||||
return mouse_area.containsMouse?Qt.lighter(FluTheme.primaryColor.dark,1.1):FluTheme.primaryColor.dark
|
|
||||||
}
|
}
|
||||||
signal clicked
|
contentItem: FluText {
|
||||||
MouseArea{
|
text: control.text
|
||||||
id:mouse_area
|
horizontalAlignment: Text.AlignHCenter
|
||||||
anchors.fill: parent
|
verticalAlignment: Text.AlignVCenter
|
||||||
hoverEnabled: true
|
font.bold: control.textBold
|
||||||
cursorShape: Qt.PointingHandCursor
|
color: {
|
||||||
onClicked: {
|
color:{
|
||||||
root.clicked()
|
if(disabled){
|
||||||
|
return disableColor
|
||||||
|
}
|
||||||
|
return hovered ? hoverColor :normalColor
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,8 +21,8 @@ if %ANDROID% == YES copy /y %LIBFILE_PATH% %BUILDER_BIN_PATH%
|
|||||||
if %1 == SHARED (
|
if %1 == SHARED (
|
||||||
echo running install to qtqml folder
|
echo running install to qtqml folder
|
||||||
del /s /q %PRESET_PATH%\plugins.qmltypes
|
del /s /q %PRESET_PATH%\plugins.qmltypes
|
||||||
%QT_QML_FLUENT_PATH%\..\..\bin\qmlplugindump.exe -nonrelocatable FluentUI 1.0 .\ > %PRESET_PATH%\plugins.qmltypes
|
%QT_QML_FLUENT_PATH%\..\..\bin\qmlplugindump.exe -nonrelocatable FluentUI 1.0 > %PRESET_PATH%\plugins.qmltypes
|
||||||
rmdir /s /q %QT_QML_FLUENT_PATH% & md %QT_QML_FLUENT_PATH%
|
rem rmdir /s /q %QT_QML_FLUENT_PATH% & md %QT_QML_FLUENT_PATH%
|
||||||
copy /y %BUILDER_BIN_PATH% %QT_QML_FLUENT_PATH%
|
copy /y %BUILDER_BIN_PATH% %QT_QML_FLUENT_PATH%
|
||||||
xcopy %PRESET_PATH% %QT_QML_FLUENT_PATH% /s/e/i/y
|
xcopy %PRESET_PATH% %QT_QML_FLUENT_PATH% /s/e/i/y
|
||||||
cd %QT_QML_FLUENT_PATH%
|
cd %QT_QML_FLUENT_PATH%
|
||||||
|
Loading…
Reference in New Issue
Block a user