import QtQuick 2.0 import QtQuick.Controls 2.9 import QtQuick.Controls.Material 2.0 ItemDelegate { id: control property var model: [] property string currentText: model[currentIndex] property int currentIndex: 0 onClicked: { if(currentText != "") currentIndex = model.indexOf(currentText) else currentIndex = 0 textEditDialog.open() } Text { anchors { right: nextPageIconText.left verticalCenter: parent.verticalCenter rightMargin: control.padding } font.pixelSize: parent.font.pixelSize color: control.Material.foreground text: currentText === "" ? "Not set": currentText } Text { id: nextPageIconText anchors { right: parent.right verticalCenter: parent.verticalCenter rightMargin: control.padding } font.pixelSize: parent.height * 0.5 font.styleName: fontAwesome.name verticalAlignment: Text.AlignVCenter color: control.Material.foreground text: "\uf105" } Dialog { id: textEditDialog parent: Overlay.overlay x: (parent.width - width) / 2 y: (parent.height - height) / 2 width: parent.width * 0.9 Material.theme: control.Material.theme Material.accent: control.Material.accent modal: true title: control.text standardButtons: Dialog.Ok | Dialog.Cancel contentItem: ListView { id: listView implicitHeight: childrenRect.height delegate: RadioDelegate { width: parent.width checked: index === control.currentIndex ButtonGroup.group: buttonGroup text: modelData onClicked: { control.currentIndex = index textEditDialog.close() } } } onAboutToShow: { listView.model = [] listView.model = control.model } ButtonGroup { id: buttonGroup } } }