web-dev-qa-db-ja.com

Qt Quick Controls 2とTableView

QuickViews 2.0アプリケーションでTableViewを使用しても問題ありませんか?これには、両方のインポートが必要です。

import QtQuick.Controls 1.4
import QtQuick.Controls 2.0

副作用はありますか?

関連するもう1つの質問:TableViewはQuick Controls 1.0セットに属しているようです。それは...ですか? TableViewを使用できる場合、Quick Controls 2.0アプリケーションですべてのQuick Controls 1.0コントロールを使用できるということですか。

11

Qt Quick Controls 1と2を同じアプリケーションで混在させることは可能ですが、最大の問題は、Qt Quick Controls 1はQtの自動高DPIスケーリングと互換性がないのに対し、Qt Quick Controls 2はそのスケーラビリティに基づいています。したがって、この2つを組み合わせたアプリケーションを実行しても、高DPIディスプレイでは理想的な結果が得られない可能性があります。

Qt Quick Controls 1 TableViewに重大なパフォーマンスの問題がある場合、1つの可能な代替策は、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型に組み込まれた他のベルやホイッスルなどの機能を提供しません。一方、パフォーマンスはまったく異なるレベルにあるため、無限のリソースを持つコンピューターで実行されている従来のデスクトップ環境以外のものを対象とする場合は、このルートを検討する価値があります。 ;)

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

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

これは、2つのコントロール間の不要な衝突を回避するのに役立ちます

10
Brian