Хотя можно смешивать Qt Quick Controls 1 и 2 в одном приложении, самая большая проблема заключается в том, что Qt Quick Controls 1 несовместим с автоматическим масштабированием Qt с высоким разрешением, тогда как Qt Quick Controls 2 основывает свою масштабируемость на этом. Поэтому запуск такого приложения, которое смешивает эти два компонента, может не дать идеальных результатов на дисплее с высоким разрешением.
Учитывая, что Qt Quick Controls 1 TableView
имеет серьезные проблемы с производительностью, одной из возможных альтернатив является использование простого ListView
из ядра Qt Quick с Row
в качестве делегата. В Qt 5.9 и более поздних версиях можно явно указать ширину содержимого и направления пролистывания, чтобы вертикальный ListView
также можно было пролистывать горизонтально. Вот слишком простой пример списка из нескольких столбцов, который вы уже можете опробовать в последней бета-версии Qt 5.9:
import QtQuick 2.9
import QtQuick.Controls 2.2
ApplicationWindow {
id: window
width: 360
height: 360
visible: true
ListView {
id: listView
anchors.fill: parent
contentWidth: headerItem.width
flickableDirection: Flickable.HorizontalAndVerticalFlick
header: Row {
spacing: 1
function itemAt(index) { return repeater.itemAt(index) }
Repeater {
id: repeater
model: ["Quisque", "Posuere", "Curabitur", "Vehicula", "Proin"]
Label {
text: modelData
font.bold: true
font.pixelSize: 20
padding: 10
background: Rectangle { color: "silver" }
}
}
}
model: 100
delegate: Column {
id: delegate
property int row: index
Row {
spacing: 1
Repeater {
model: 5
ItemDelegate {
property int column: index
text: qsTr("%1x%2").arg(delegate.row).arg(column)
width: listView.headerItem.itemAt(column).width
}
}
}
Rectangle {
color: "silver"
width: parent.width
height: 1
}
}
ScrollIndicator.horizontal: ScrollIndicator { }
ScrollIndicator.vertical: ScrollIndicator { }
}
}
Конечно, такой упрощенный многоколоночный список не предоставляет таких функций, как перемещаемые и изменяемые по размеру столбцы и другие навороты, которые были встроены в старый добрый тип TableView
. С другой стороны, производительность находится на совершенно другом уровне, поэтому, если вы нацелены на что-то иное, чем классические среды рабочего стола, работающие на компьютерах с бесконечными ресурсами, возможно, стоит рассмотреть этот маршрут. ;)
person
jpnurmi
schedule
08.05.2017
TableView
находится в разработке для элементов управления 2 и будет доступен где-то в (надеюсь, в ближайшем) будущем. В настоящее время вы можете использоватьTableView
из QC1, так как две библиотеки можно смешивать и сопоставлять, даже если они имеют несовместимый API. Вы можете использовать именованный импорт, чтобы избежать конфликта имен. - person BaCaRoZzo   schedule 15.04.2017