Qt Quick Controls 2 и TableView
можно ли использовать TableView в приложении Quick Controls 2.0? Для этого потребуется иметь оба импорта:
import QtQuick.Controls 1.4
import QtQuick.Controls 2.0
получу ли я какие-либо побочные эффекты?
еще один связанный вопрос: кажется, что TableView принадлежит Quick Controls 1.0 set. Это? Означает ли это, что если можно использовать TableView, то можно использовать все элементы управления Quick Controls 1.0 в приложении Quick Controls 2.0?
2 ответов
хотя можно смешивать Qt Quick Controls 1 и 2 в одном приложении, самая большая проблема заключается в том, что Qt Quick Controls 1 не совместимы с автоматическим масштабированием Qt с высоким разрешением, тогда как Qt Quick Controls 2 основывает свою масштабируемость на этом. Поэтому запуск такого приложения, которое смешивает эти два, может не дать идеальных результатов на дисплее с высоким разрешением.
учитывая, что Qt Quick Controls 1 TableView
имеет серьезные проблемы с производительностью, одна из возможных альтернатив-использовать plain ListView
из Qt Quick core с 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
тип. С другой стороны, производительность находится на совершенно другом уровне, поэтому, если вы нацелены на что-то другое, чем классические среды рабочего стола, работающие на компьютерах с бесконечными ресурсами, этот маршрут может стоить рассмотреть. ;)
import QtQuick.Controls 1.4 as C
import QtQuick.Controls 2.0
C.TableView { //controls 1.4
Button { //controls 2.0
}
}
Это поможет вам избежать нежелательных столкновений между двумя элементами управления