Qt Quick Controls 2 and TableView

前端 未结 2 2071
温柔的废话
温柔的废话 2021-01-02 03:11

Is it OK to use TableView in Quick Controls 2.0 application? This will require to have both imports:

import QtQuick.Controls 1.4
import QtQuick.Controls 2.0
         


        
相关标签:
2条回答
  • 2021-01-02 03:23

    While it is possible to mix Qt Quick Controls 1 and 2 in the same application, the biggest issue is that Qt Quick Controls 1 are not compatible with Qt's automatic high-DPI scaling, whereas Qt Quick Controls 2 bases its scalability on that. Therefore running such application that mixes the two might not give ideal results on a high-DPI display.

    Given that Qt Quick Controls 1 TableView has severe performance issues, one possible alternative is to use plain ListView from Qt Quick core with Row as a delegate. With Qt 5.9 and later, it is possible to explicitly specify the content width and flicking directions so that a vertical ListView can be also flicked horizontally. Here's an overly simple multi-column list example, something you can already try out with the latest 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 { }
        }
    }
    

    Of course, this kind of simplified multi-column list does not provide such features as movable and resizable columns and other bells and whistles that were built into the good old TableView type. On the other hand, the performance is on a whole different level, so if you're targeting something else than classic desktop environments running on computers with endless resources, this route might be worth considering. ;)

    0 讨论(0)
  • 2021-01-02 03:29
    import QtQuick.Controls 1.4 as C
    import QtQuick.Controls 2.0
    
    C.TableView {  //controls 1.4
       Button {  //controls 2.0
       }
    }
    

    This will help you avoid any unwanted clashes between the two controls

    0 讨论(0)
提交回复
热议问题