添加tag组件
parent
5f975a20e2
commit
a9fd98043b
|
@ -0,0 +1,167 @@
|
|||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Window
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Controls.Basic
|
||||
import FluentUI
|
||||
|
||||
Rectangle {
|
||||
id: input
|
||||
|
||||
width: 300
|
||||
height: 32
|
||||
|
||||
radius: 5
|
||||
clip: true
|
||||
border.color: textInput.activeFocus ? "#268CDC":"#979592" //gray100
|
||||
ListModel { id: tagListModel }
|
||||
|
||||
|
||||
|
||||
Row {
|
||||
x: 5
|
||||
height: parent.height
|
||||
spacing: 5
|
||||
|
||||
Row {
|
||||
id: rowTag
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
spacing: 5
|
||||
|
||||
Repeater {
|
||||
model: tagListModel
|
||||
|
||||
Loader {
|
||||
sourceComponent: tagItem
|
||||
Component.onCompleted: {
|
||||
item.closeClicked.connect(function(){
|
||||
tagListModel.remove(index)
|
||||
})
|
||||
|
||||
item.tag = Qt.binding(function(){return tag})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
width: input.width - rowTag.width
|
||||
height: parent.height
|
||||
|
||||
TextField {
|
||||
id:textInput
|
||||
placeholderText: qsTr("按回车键Enter创建标签")
|
||||
|
||||
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
width: parent.width - 15
|
||||
clip: true
|
||||
|
||||
background: Rectangle {
|
||||
}
|
||||
|
||||
Keys.onReturnPressed: {
|
||||
if (text.length === 0)
|
||||
return
|
||||
|
||||
|
||||
tagListModel.append({"tag": text})
|
||||
//console.log(tagListModel.get(0))
|
||||
text = ""
|
||||
}
|
||||
|
||||
Keys.onPressed: {
|
||||
if (event.key === Qt.Key_Backspace) {
|
||||
if (text.length === 0 && tagListModel.count) {
|
||||
tagListModel.remove(tagListModel.count-1)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
property Component tagItem:
|
||||
Rectangle {
|
||||
id: rootTagItem
|
||||
property alias tag: tagText.text
|
||||
signal closeClicked()
|
||||
|
||||
width: content.width
|
||||
height: 25
|
||||
radius: 5
|
||||
border.color: "#77c7ff"
|
||||
|
||||
MouseArea {
|
||||
id: mouseArea
|
||||
property bool hovered: false
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
onEntered: hovered = true
|
||||
onExited: hovered = false
|
||||
|
||||
Row {
|
||||
id: content
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
height: rootTagItem.height
|
||||
|
||||
Item { width: 5; height: 1 }
|
||||
|
||||
Text {
|
||||
id: tagText
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
font.pixelSize: rootTagItem.height * 0.5
|
||||
text: "Hello"
|
||||
color: rootTagItem.border.color
|
||||
}
|
||||
|
||||
Item { visible: mouseArea.hovered; width: 5; height: 1 }
|
||||
|
||||
Item {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
width: mouseArea.hovered ? 15 : 0
|
||||
height: rootTagItem.height
|
||||
visible: mouseArea.hovered
|
||||
Behavior on width {
|
||||
NumberAnimation {duration: 100}
|
||||
}
|
||||
|
||||
Behavior on visible {
|
||||
NumberAnimation {duration: 100}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
width: height
|
||||
height: parent.height * 0.6
|
||||
anchors.centerIn: parent
|
||||
radius: height
|
||||
color: closeMouseArea.pressed ? "gray" : "red"
|
||||
visible: closeMouseArea.hovered
|
||||
}
|
||||
|
||||
Text {
|
||||
anchors.centerIn: parent
|
||||
text: "×"
|
||||
color: closeMouseArea.hovered ? "white" : rootTagItem.border.color
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: closeMouseArea
|
||||
property bool hovered: false
|
||||
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
onEntered: hovered = true
|
||||
onExited: hovered = false
|
||||
onCanceled: hovered = false
|
||||
onClicked: rootTagItem.closeClicked()
|
||||
}
|
||||
}
|
||||
|
||||
Item { width: 5; height: 1 }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue