在Quick Controls 2.0应用程序中使用TableView是否可以?这将需要引入两个导入:
import QtQuick.Controls 1.4
import QtQuick.Controls 2.0
我会有任何副作用吗?
另一个相关的问题:似乎TableView属于Quick Controls 1.0集。 是吗? 这是否意味着如果可以使用TableView,则可以在Quick Controls 2.0应用程序中使用所有Quick Controls 1.0控件?
在Quick Controls 2.0应用程序中使用TableView是否可以?这将需要引入两个导入:
import QtQuick.Controls 1.4
import QtQuick.Controls 2.0
我会有任何副作用吗?
另一个相关的问题:似乎TableView属于Quick Controls 1.0集。 是吗? 这是否意味着如果可以使用TableView,则可以在Quick Controls 2.0应用程序中使用所有Quick Controls 1.0控件?
虽然在同一个应用程序中混合使用Qt Quick Controls 1和2是可能的,但最大的问题是Qt Quick Controls 1不兼容Qt的自动高DPI缩放,而Qt Quick Controls 2基于此进行可扩展性。因此,在高DPI显示器上运行这样混合使用两者的应用程序可能会得不到理想的结果。
鉴于Qt Quick Controls 1的TableView
存在严重性能问题,一种可能的替代方案是使用来自Qt Quick core的普通ListView
,并将其作为委托使用Row
。使用Qt 5.9及更高版本,可以显式地指定内容宽度和滑动方向,以便垂直ListView
也可以水平滚动。以下是一个过度简化的多列列表示例,您可以使用最新的Qt 5.9 beta版本尝试:
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
}
}
这将帮助您避免两个控件之间的任何意外冲突。