diff --git a/example/T_Badge.qml b/example/T_Badge.qml new file mode 100644 index 0000000..ed80ad0 --- /dev/null +++ b/example/T_Badge.qml @@ -0,0 +1,101 @@ +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import QtQuick.Window 2.15 +import QtQuick.Controls 2.15 +import QtGraphicalEffects 1.15 +import FluentUI 1.0 + +FluScrollablePage{ + + title:"Badge" + + + FluArea{ + width: parent.width + Layout.topMargin: 20 + height: 106 + paddings: 10 + + Column{ + spacing: 15 + anchors{ + verticalCenter: parent.verticalCenter + left: parent.left + } + FluText{ + text:"一般出现在通知图标或头像的右上角,用于显示需要处理的消息条数" + } + + Row{ + spacing: 20 + Rectangle{ + width: 40 + height: 40 + radius: 8 + color: Qt.rgba(191/255,191/255,191/255,1) + FluBadge{ + count:0 + } + } + + Rectangle{ + width: 40 + height: 40 + radius: 8 + color: Qt.rgba(191/255,191/255,191/255,1) + FluBadge{ + count:5 + } + } + Rectangle{ + width: 40 + height: 40 + radius: 8 + color: Qt.rgba(191/255,191/255,191/255,1) + FluBadge{ + count:50 + } + } + Rectangle{ + width: 40 + height: 40 + radius: 8 + color: Qt.rgba(191/255,191/255,191/255,1) + FluBadge{ + count:100 + } + } + Rectangle{ + width: 40 + height: 40 + radius: 8 + color: Qt.rgba(191/255,191/255,191/255,1) + FluBadge{ + isDot:true + } + } + Rectangle{ + width: 40 + height: 40 + radius: 8 + color: Qt.rgba(191/255,191/255,191/255,1) + FluBadge{ + count:99 + color: Qt.rgba(250/255,173/255,20/255,1) + } + } + Rectangle{ + width: 40 + height: 40 + radius: 8 + color: Qt.rgba(191/255,191/255,191/255,1) + FluBadge{ + count:99 + color: Qt.rgba(82/255,196/255,26/255,1) + } + } + } + } + } + +} diff --git a/example/T_Rectangle.qml b/example/T_Rectangle.qml index 6897204..af9feb5 100644 --- a/example/T_Rectangle.qml +++ b/example/T_Rectangle.qml @@ -21,8 +21,6 @@ FluScrollablePage{ height: 50 color:"#744da9" radius:[15,15,15,15] - FluBadge{ - } } FluRectangle{ width: 50 diff --git a/example/T_Tooltip.qml b/example/T_Tooltip.qml index ce6da79..a0311db 100644 --- a/example/T_Tooltip.qml +++ b/example/T_Tooltip.qml @@ -7,7 +7,7 @@ import FluentUI 1.0 FluScrollablePage{ - title:"TextBox" + title:"Tooltip" FluText{ Layout.topMargin: 20 diff --git a/example/page/ChatPage.qml b/example/page/ChatPage.qml index fda11a9..5dc8925 100644 --- a/example/page/ChatPage.qml +++ b/example/page/ChatPage.qml @@ -14,6 +14,11 @@ FluWindow { title:"ChatGPT" + onInitArgument: + (argument)=>{ + scrollview.focus = true + } + ChatController{ id:controller @@ -167,6 +172,7 @@ FluWindow { ScrollView{ + id:scrollview anchors{ bottom: parent.bottom left: parent.left @@ -178,6 +184,8 @@ FluWindow { height: Math.min(textbox.implicitHeight,64) FluMultiLineTextBox{ id:textbox + focus:true + placeholderText: "请输入消息" } } diff --git a/example/page/MainPage.qml b/example/page/MainPage.qml index a87df03..fc75fae 100644 --- a/example/page/MainPage.qml +++ b/example/page/MainPage.qml @@ -90,6 +90,13 @@ FluWindow { } } + FluPaneItem{ + title:"Badge" + onTap:{ + nav_view.push("qrc:/T_Badge.qml") + } + } + FluPaneItem{ title:"Rectangle" onTap:{ @@ -97,7 +104,6 @@ FluWindow { } } - FluPaneItem{ title:"Carousel" onTap:{ diff --git a/example/qml.qrc b/example/qml.qrc index 6f21880..0b1ac4f 100644 --- a/example/qml.qrc +++ b/example/qml.qrc @@ -41,5 +41,6 @@ res/image/logo_openai.png page/ChatPage.qml T_Tooltip.qml + T_Badge.qml diff --git a/src/controls/FluBadge.qml b/src/controls/FluBadge.qml index 30828f2..c2581b3 100644 --- a/src/controls/FluBadge.qml +++ b/src/controls/FluBadge.qml @@ -1,11 +1,77 @@ import QtQuick 2.15 -Item { +Rectangle{ property bool isDot: false + property bool showZero: true + property int count: 0 - Rectangle{ + id:control + color:Qt.rgba(255/255,77/255,79/255,1) + width: { + if(isDot) + return 10 + if(count<10){ + return 20 + }else if(count<100){ + return 30 + } + return 40 + } + height: { + if(isDot) + return 10 + return 20 + } + radius: { + if(isDot) + return 5 + return 10 + } + border.width: 1 + border.color: Qt.rgba(1,1,1,1) + visible: { + if(showZero) + return true + return count!==0 + } + anchors{ + right: { + if(parent) + return parent.right + return undefined + } + top: { + if(parent) + return parent.top + return undefined + } + rightMargin: { + if(isDot){ + return -2.5 + } + return -(control.width/2) + } + topMargin: { + if(isDot){ + return -2.5 + } + return -10 + } } + Text{ + anchors.centerIn: parent + color: Qt.rgba(1,1,1,1) + visible: !isDot + text:{ + if(count<100) + return count + return count+"+" + } + } + + + }