qt - 如何创建带有列标题的表格 View (5.12)?

标签 qt qml tableview

我正在使用新的 qml tableview (Qt 5.12) 创建一个表。 我能够在 C++ 中创建模型,并能够以表格格式和滚动条填充模型。如何向该表添加列标题? 代码:

import QtQuick 2.12
import QtQuick.Controls 2.5
import Qt.labs.qmlmodels 1.0
//import QtQuick.Controls.Styles 1.4
import TableModel 0.1
Rectangle {
    id:table
    border.width: 3
    border.color: 'dark blue'
    QtObject{
        id:internals
        property int rows:0
        property int col:0
        property int colwidth:0
        property var columnName:[]
    }

    function setRows(num){ internals.rows = num}
    function setCols(num){ internals.col =  num}
    function setColWidth(num){internals.colwidth = num}

    function setColNames(stringlist){
        if(stringlist.length > 1)
            internals.col = stringlist.length

    dataModel.setColumnName(stringlist);
    }

    function addRowData(stringlist){
        var len = stringlist.length

         if(len >0)
         {
             dataModel.addData(stringlist)
         }
    }

    TableModel {
        id:dataModel
    }

    TableView{
            id:tbl
            anchors.top: headerCell
            anchors.fill: parent
            //columnSpacing: 1
            //rowSpacing: 1
            clip: true

           ScrollBar.horizontal: ScrollBar{}
           ScrollBar.vertical: ScrollBar{}

            model:dataModel

            Component{
                id:datacell
                Rectangle {
                    implicitWidth: 100
                    implicitHeight: 20
                    color: 'white'
                    border.width: 1
                    border.color: 'dark grey'
                    Text {
                        id:txtbox
                        anchors.fill: parent
                        wrapMode:                           Text.NoWrap
                        clip:                               true
                        verticalAlignment:                  Text.AlignVCenter
                        horizontalAlignment:                Text.AlignHCenter
                        text: display
                    }
                }
            }

        }

        function init(){
            console.log("Calling init")
            tbl.delegate= datacell
        }

}

最佳答案

目前 TableView 没有标题,因此您应该创建它,在本例中使用 Row、Column 和 Repeater。

另一方面,您必须实现 headerData 方法,并且必须执行 Q_INVOKABLE。

class TableModel : public QAbstractTableModel
{
    Q_OBJECT

public:
    // ...
    Q_INVOKABLE QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
    // ...
TableView {
    id: tableView
    model: table_model
    // ...
    Row {
        id: columnsHeader
        y: tableView.contentY
        z: 2
        Repeater {
            model: tableView.columns > 0 ? tableView.columns : 1
            Label {
                width: tableView.columnWidthProvider(modelData)
                height: 35
                text: table_model.headerData(modelData, Qt.Horizontal)
                color: '#aaaaaa'
                font.pixelSize: 15
                padding: 10
                verticalAlignment: Text.AlignVCenter

                background: Rectangle { color: "#333333" }
            }
        }
    }
    Column {
        id: rowsHeader
        x: tableView.contentX
        z: 2
        Repeater {
            model: tableView.rows > 0 ? tableView.rows : 1
            Label {
                width: 60
                height: tableView.rowHeightProvider(modelData)
                text: table_model.headerData(modelData, Qt.Vertical)
                color: '#aaaaaa'
                font.pixelSize: 15
                padding: 10
                verticalAlignment: Text.AlignVCenter

                background: Rectangle { color: "#333333" }
            }
        }
    }

enter image description here

您找到的完整示例here .

关于qt - 如何创建带有列标题的表格 View (5.12)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55610163/

相关文章:

使用文本类并选择行时 JavaFX TableColumn 字体颜色错误

c++ - 如何在未知的 typedef 结构和 QByteArray 之间进行序列化和反序列化

qt - cmake如何包含shaders.qrc

c++ - 存储在 vector 中的图像都是相同的

c++ - 用qml ListView显示Json数据

ios - 点击 didSelectRow 以转到另一个 View Controller 时崩溃

c++ - QT的UDP广播

c++ - 每个 QML 视频帧的回调

c++ - 不按住鼠标按钮不接收 mouseMoveEvent

ios - 如何在 TableView 的行中应用不同的单元格样式