Kirigami.Chip components are small elements inherited from AbstractButton used for displaying common properties or filters of something. These are typically text elements, which is also interactable and comes with an optional delete button.
Quick Start
Chips can easily be added using the Kirigami.Chip component. By assigning a string to its text field, we give chips their name.
Since chips are meant to be used more than once, you'll likely want to use some kind of list data structure and iterate over them to display the chips. To do this, we need a ListModel and a Repeater component.
The ListModel is used as storage for the chips. To populate the ListModel (and therefore chips), we declare a couple of ListElement components, which contains a field known as text. We can use this string assigned from here to the text field for each repeated chip.
The Repeater is used for displaying the chips. First, we need to set the model field of the Repeater to our ListModel, or create the ListModel inside of repeater. Then, we declare the Kirigami.Chip component inside of the Repeater, and assign its text field with the element's data using the modelData property.
You can dynamically append and remove data from the ListModel, and the Repeater will automatically make those changes. However, simply changing a specific item from either the Repeater or ListModel does not affect the other, and requires the changing of both, unless something like QAbstractListModel is used. See Example Application for more information.
Example Application
The example application below showcases how chips can be used in programs such as to-do lists.
import QtQuickimport QtQuick.Layoutsimport QtQuick.Controlsimport org.kde.kirigami as KirigamiKirigami.ApplicationWindow {id: root title: "Chips"ListModel {id: chipsListElement { text: "Chip 1" }ListElement { text: "Chip 2" }ListElement { text: "Chip 3" } } pageStack.initialPage: Kirigami.Page { title:"Chips"Kirigami.OverlaySheet { id: editChipPrompt property var chip; property var index; header:Kirigami.Heading { text:"Edit Chip" } footer: DialogButtonBox { standardButtons:DialogButtonBox.Ok |DialogButtonBox.Cancel onAccepted: {// Both the data from the Repeater and ListModel must be// edited in order to update both.editChipPrompt.chip.text =editTextField.text;chips.setProperty(editChipPrompt.index,"text",editTextField.text);editChipPrompt.close(); } onRejected: {editChipPrompt.close(); } } TextField { id: editTextField } }Kirigami.FormLayout {anchors.fill: parent TextField { id: insertTextFieldKirigami.FormData.label: "Item:" onAccepted:chips.append({ text:insertTextField.text }) }// Wrapped in ColumnLayout to prevent binding loops. ColumnLayout {Layout.alignment: Qt.AlignHCenter Repeater { model: chipsKirigami.Chip { id: chip text: modelData onClicked: {editTextField.text = modelData;editChipPrompt.chip = chip;editChipPrompt.index = index;editChipPrompt.open(); } onRemoved:chips.remove(index) } } } } }}