如何在 QtQuickControls2 中使用 TableView 和 ListModel 数据?

Posted

技术标签:

【中文标题】如何在 QtQuickControls2 中使用 TableView 和 ListModel 数据?【英文标题】:How to use TableView with ListModel data in QtQuickControls2? 【发布时间】:2020-11-20 07:21:32 【问题描述】:

如何使用样式代表在此表中插入列?

我使用的是QtQuick.Controls 2,所以这里不能使用旧QtQuick的TableViewColumn

https://www.qt.io/blog/2016/10/06/qt-quick-controls-2-1-and-beyond

Qt Quick Controls 1 中一些值得注意的缺失功能是 Action、SplitView、TableView 和 TreeView。

如果根本不支持,那么QML中表格的形成方法是什么?

出路是什么?

import QtQuick.Window 2.12
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Controls.Styles 1.4

Window

    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    TableView
    
        height: 200; width: 200
        columnSpacing: 1
        rowSpacing: 1

        x: 10; y: 10

        model: ListModel
        
            id: mymodel
            ListElement
            
               aaa : "Banana1"
               bbb : "Apple1"
            
            ListElement
            
                aaa : "Banana2"
                bbb : "Apple2"
            
        


        delegate: Rectangle
                    
                        implicitWidth: 100
                        implicitHeight: 50
                        color: "red"
                        border.color: "black"
                        Text
                        
                            text: mymodel.data(1,"aaa")
                        
                    

        MouseArea
        
            anchors.fill: parent
            onClicked:
            
                console.log( mymodel.display)
            
        
    

【问题讨论】:

您检查了Table view 示例吗? 【参考方案1】:

你的方法是对的,只是错过了几分。

请参考您更新后的有效代码:

import QtQuick.Window 2.12
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Controls.Styles 1.4

Window 
  visible: true
  width: 640
  height: 480
  title: qsTr("TableView example")

  TableView 
    height: 200
    width: 200
    columnSpacing: 1
    rowSpacing: 1
    x: 10
    y: 10

    model: ListModel 
      id: mymodel
      ListElement 
        aaa : "Banana1"
        bbb : "Apple1"
      
      ListElement 
        aaa : "Banana2"
        bbb : "Apple2"
      
    

    delegate: Rectangle 
      implicitWidth: 100
      implicitHeight: 50
      color: "red"
      border.color: "black"
      Text 
        anchors.centerIn: parent
        text: aaa
      
      Text 
        color: "cyan"
        anchors 
          bottom: parent.bottom
          horizontalCenter: parent.horizontalCenter
        
        text: bbb
      
      MouseArea 
        anchors.fill: parent
        onClicked: 
          console.log("Clicked on delegate:")
          console.log(" - Attached model property:", model)
          console.log(" - Attached model.aaa:", model.aaa)
          console.log(" - Attached model.bbb:", model.bbb)
        
      
    
  

您可以毫无问题地使用ListModel TableView。要访问内容,您可以参考 model 属性和/或通过相应的属性名称访问(如我的示例中所示)。

【讨论】:

以上是关于如何在 QtQuickControls2 中使用 TableView 和 ListModel 数据?的主要内容,如果未能解决你的问题,请参考以下文章

qtquickcontrols2控件集(使用参考重构)

QtQuickcontrols2控件使用参考

Qt - Quick控件配置文件(qtquickcontrols2.conf)

Qt Quick Controls 2 启动画面

如何在 QML 中隐藏菜单项

Qt Quick Controls 2.14 如何设置ScrollView的样式