Раз в контролах такого нет, то придется нарисовать все самому. (ну или копать исходники).
На чистом qml простейший пример без дополнительных плюшек выглядит примерно так:
Item {
id: root
property QtObject activeTab: null
// здесь идет обычный ListView (или Row с Repeater) с нарисованными табами
Item { // содержимое первой вкладки
id: tab1
//расположение
visible: (activeTab==tab1)
}
Item { // содержимое второй вкладки
id: tab2
//расположение
visible: (activeTab==tab2)
}
Соотвественно чтобы сделать вкладку видимой нужно всего лишь
root.activeTab = tab1;
Ну и наконец упаковать это все дело в одну модель, чтобы было удобненько:
ListModel {
id: list
ListElement { text: "Первая вкладка"; icon: "icon1.svg"; obj: tab1}
ListElement { text: "Вторая вкладка"; icon: "icon2.svg"; obj: tab2}
}
Синтаксис не проверял, где-то мог допустить опечатку.