import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.3 import QtQuick.Window 2.15 import Qt.labs.qmlmodels 1.0 Window { visible: true width: 640 height: 480 title: qsTr("TableView") Item { anchors.fill: parent HorizontalHeaderView { id: columnHeader2 boundsBehavior: Flickable.StopAtBounds syncView: tableView height: 35 } TableView { id: tableView clip: true columnSpacing: 1 rowSpacing: 1 boundsBehavior: Flickable.StopAtBounds pixelAligned: true anchors { left: parent.left right: parent.right top: columnHeader2.bottom bottom: parent.bottom } property int rowHeight: 50 property int selectedRow: -1 property var handleCellClicked: function(mouseEvent, row, column) { if (selectedRow !== row) { selectedRow = row } } onContentXChanged: { var overshoot = contentX + width - contentWidth if (overshoot > 0) { contentX -= overshoot } } columnWidthProvider: function(column) { if (column === 1) { return 0 } return 100 } rowHeightProvider: function(row) { return tableView.rowHeight } ScrollBar.vertical: ScrollBar { policy: ScrollBar.AlwaysOn } ScrollBar.horizontal: ScrollBar { policy: ScrollBar.AlwaysOn } Rectangle { objectName: "focusedRect" anchors { left: parent.left right: parent.right } height: tableView.rowHeight y: (height + tableView.rowSpacing) * tableView.selectedRow color: tableView.activeFocus ? "green" : "red" opacity: 0.3 visible: tableView.selectedRow > -1 } delegate: DelegateChooser { role: "edit" DelegateChoice { roleValue: "other" delegate: Rectangle { required property string display color: "#dd4455" Text { text: display } } } // default DelegateChoice { roleValue: "default" delegate: Rectangle { required property string display color: "transparent" border.width: 1 Text { text: display } MouseArea { anchors.fill: parent onClicked: { tableView.handleCellClicked(mouse, row, column) } } } } } // DelegateChooser Component.onCompleted: { var cols = '' for (var i = 0; i < 100; ++i) { cols += ('TableModelColumn {\n' + 'display: "column{i}"\n' + 'edit: "type{i}"' + '}\n').replace(/\{i\}/g, i) } var _model = Qt.createQmlObject( 'import Qt.labs.qmlmodels 1.0\n' + 'TableModel {\n' + cols + '}\n', tableView) for (var r = 0; r < 100; ++r) { var data = {} for (var c = 0; c < _model.columnCount; ++c) { data["column" + c] = r + ", " + c data["type" + c] = ((c % 2) > 0) ? "other" : "default" } _model.appendRow(data) } tableView.model = _model tableView.forceLayout() } } // TableView } // Column }