web-dev-qa-db-fra.com

Qt Quick Controls 2 et TableView

Est-il OK d'utiliser TableView dans l'application Quick Controls 2.0? Cela nécessitera d'avoir les deux importations:

import QtQuick.Controls 1.4
import QtQuick.Controls 2.0

Aurai-je des effets secondaires?

Autre question connexe: il semble que TableView appartient à l'ensemble Quick Controls 1.0. C'est ça? Cela signifie-t-il que s'il est possible d'utiliser TableView, il est alors possible d'utiliser tous les contrôles Quick Controls 1.0 dans l'application Quick Controls 2.0?

11
Alexander Dyagilev

Bien qu'il soit possible de mélanger Qt Quick Controls 1 et 2 dans la même application, le plus gros problème est que Qt Quick Controls 1 n'est pas compatible avec la mise à l'échelle automatique à haute résolution de Qt, tandis que Qt Quick Controls 2 fonde son évolutivité sur cela. Par conséquent, l'exécution d'une telle application qui mélange les deux peut ne pas donner des résultats idéaux sur un écran haute résolution.

Étant donné que Qt Quick Controls 1 TableView a de graves problèmes de performances, une alternative possible consiste à utiliser plain ListView à partir du noyau Qt Quick avec Row comme délégué. Avec Qt 5.9 et versions ultérieures, il est possible de spécifier explicitement la largeur du contenu et les directions de défilement afin qu'un ListView vertical puisse également être balayé horizontalement. Voici un exemple de liste multi-colonnes trop simple, quelque chose que vous pouvez déjà essayer avec la dernière version bêta de 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 { }
    }
}

Bien sûr, ce type de liste multi-colonnes simplifiée ne fournit pas de fonctionnalités telles que les colonnes mobiles et redimensionnables et autres cloches et sifflets qui ont été intégrés dans le bon vieux type TableView. D'un autre côté, les performances sont à un tout autre niveau, donc si vous ciblez autre chose que des environnements de bureau classiques fonctionnant sur des ordinateurs avec des ressources infinies, cet itinéraire pourrait être utile. ;)

20
jpnurmi
import QtQuick.Controls 1.4 as C
import QtQuick.Controls 2.0

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

Cela vous aidera à éviter tout conflit indésirable entre les deux contrôles

10
Brian