Qt 5.12 TableView标头委托

时间:2019-01-15 05:32:57

标签: qtquick2 qtquickcontrols2

我已经在Qt 5.12中使用新的TableView创建了该表视图,但是我不知道如何为其创建标头,我阅读了文档,也没有标头委托。这里是一些屏幕截图:

Screenshot

所以如何为5.12 TableView添加headerDelegate?

import QtQuick 2.12
import QtQuick.Controls 2.12
ApplicationWindow {
    visible: true
    ListModel{
        id:tableModel
        ListElement{
            identifier:1
            name:'value'
            title: 'test'
        }
        ListElement{
            identifier:2
            name:'value2'
            title: 'test2'
        }
    }

    width:1000; height: 500
    //

    TableView {
        id:trans
        LayoutMirroring.enabled: true
        LayoutMirroring.childrenInherit: true
        anchors.fill: parent
        columnSpacing: 1
        rowSpacing: 1
        clip: true
        model: tableModel

        delegate: Rectangle {

            Row{
                Rectangle{
                    implicitWidth: 100
                    implicitHeight: 50
                    Text{
                        text: identifier
                    }
                }
                Rectangle{
                    implicitWidth: 100
                    implicitHeight: 50
                    Text{
                        text:name
                    }
                }

                Rectangle{
                    implicitWidth: 100
                    implicitHeight: 50
                    Text{
                        text:title
                    }
                }

            }

        }
    }
}

和TableViewColumn不起作用

Qc.TableViewColumn{
    title: 'id'
    role: 'identifier'
    width:100
}

我正在尝试从C ++设置其标头,但我的代码无法正常运行

class TableHelper : public QObject
{
    Q_OBJECT

public:

    Q_INVOKABLE void setTableHeader(QObject & table){
        // get QTableView and Set QHeaderView 
        qDebug()<< "here";
    }
};

main:

TableHelper th;
engine.rootContext()->setContextProperty("tableHelper",&th);

qml:

Component.onCompleted: {
        tableHelper.setTableHeader(trans)
}

我在C ++代码中有一个断点,但是它永远不会运行。

1 个答案:

答案 0 :(得分:0)

This github回购展示了如何在QML TableView(Qt 5.12.0)中构建自己的标头:

TableView {
      anchors.fill: parent
      columnSpacing: 1
      rowSpacing: 1
      clip: true

      model: TableModel {}

      delegate: Rectangle {
          implicitWidth: 150
          implicitHeight: 50
          border.color: "black"
          border.width: 2
          color: (heading==true)?"red":"green" // If heading make it red!

          TableView.onPooled: console.log(tabledata + " pooled")
          TableView.onReused: console.log(tabledata + " resused")

          Text {
              text: tabledata
              font.pointSize: 12
              anchors.centerIn: parent
          }
      }
  }