Qt快速控制2和TableView

Qt快速控制2和TableView,qt,qml,qtquickcontrols,qtquickcontrols2,Qt,Qml,Qtquickcontrols,Qtquickcontrols2,在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
作为代理。使用Qt5.9及更高版本,可以明确指定内容宽度和翻转方向,以便垂直
列表视图也可以水平翻转。下面是一个过于简单的多列列表示例,您可以在最新的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
类型中的功能。另一方面,性能处于完全不同的水平,因此,如果您的目标不是在资源无限的计算机上运行的经典桌面环境,那么这条路线可能值得考虑。;)


这将帮助您避免两个控件之间出现任何不必要的冲突

TableView
正在为控件2开发,并将在不久的将来提供。此时,您可以使用QC1中的
TableView
,因为这两个库可以混合和匹配,即使它们有不兼容的API。您可以使用来避免名称冲突。如果我有一个QabStretctTableModel作为模型。有没有办法使用这种方法?我不知道如何告诉模型我需要哪个列。如果我需要不同列的headerView(垂直和水平)和委托项,在Qt5.12之前没有更好的解决方案。但是,我如何使列的大小可调整和可移动?任何源?数据不可使用此解决方案进行排序将标签替换为可单击的内容,并调用QAbstractItemModel::sort()。它不是Q_可调用的,所以您必须自己将其公开给QML。
import QtQuick.Controls 1.4 as C
import QtQuick.Controls 2.0

C.TableView {  //controls 1.4
   Button {  //controls 2.0
   }
}