在QT5.14使用QTableView控件入門示例

簡介

QTableView類實現一個表視圖,該視圖顯示模型中的項目。
此類用於提供以前由QTable類提供的標準表,但使用Qt的模型/視圖體系結構提供的更靈活的方法。

QTableView類是Model / View類之一,並且是Qt 模型/視圖框架的一部分。
QTableView實現了由QAbstractItemView類定義的接口,以允許其顯示從QAbstractItemModel類派生的模型提供的數據。

導航

您可以通過使用鼠標單擊某個單元格或使用箭頭鍵來導航表中的單元格。由於QTableView 默認情況下啓用tabKeyNavigation,因此您還可以單擊Tab和Backtab在單元格之間移動。

視覺外觀

該表具有可以使用verticalHeader()函數獲得的垂直標題,以及可以通過horizontalHeader()函數獲得的水平標題。可以使用rowHeight()找到表中每一行的高度;同樣,可以使用columnWidth()找到列的寬度。由於這兩個都是簡單的小部件,因此您可以使用它們的hide()函數隱藏它們中的任何一個。

可以隱藏行和列,並使用hideRow(),hideColumn(),showRow()和showColumn()進行顯示。可以使用selectRow()和selectColumn()來選擇它們。該表將顯示一個網格,具體取決於showGrid屬性。

表格視圖中顯示的項目與其他項目視圖中的項目一樣,是使用標準委託渲染和編輯的。但是,對於某些任務,有時可以將小部件插入表中有時會很有用。使用setIndexWidget()函數爲特定索引設置窗口小部件,然後使用indexWidget()進行檢索。

默認情況下,表格中的單元格不會展開以填充可用空間。

您可以通過拉伸最後一個標題部分來使單元格填充可用空間。使用horizontalHeader()或verticalHeader()訪問相關的標頭,並設置標頭的StretchLastSection屬性。

要根據每列或每行的空間要求分配可用空間,請調用視圖的resizeColumnsToContents()或resizeRowsToContents()函數。

座標系

對於某些特殊形式的表,能夠在行索引和列索引以及窗口小部件座標之間進行轉換非常有用。所述rowAt()函數提供的指定行的視圖中的y座標; 行索引可用於通過rowViewportPosition()獲得相應的y座標。所述columnAt()和columnViewportPosition()函數提供x座標和列索引之間的等效轉換操作。

簡單示例

創建一個項目qtableview_demo1

在這裏插入圖片描述
在這裏插入圖片描述

設計窗體

在窗體中添加一個QTableView控件
在這裏插入圖片描述

修改代碼mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QStandardItemModel>
#include <ctime>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //提供了用於存儲自定義數據的通用模型
    QStandardItemModel *model = new QStandardItemModel(5,4);
    model->setHeaderData(0,Qt::Horizontal,tr("第一季度"));
    model->setHeaderData(1,Qt::Horizontal,tr("第二季度"));
    model->setHeaderData(2,Qt::Horizontal,tr("第三季度"));
    model->setHeaderData(3,Qt::Horizontal,tr("第四季度"));
    //循環插入數據
    for(int row=0;row<5;row++)
    {
        model->insertRows(row,1); //插入一行
        model->setData(model->index(row,0), qrand()%1000+1000); //插入第一列 插入一個1000-2000的隨機數
        model->setData(model->index(row,1), qrand()%1000+1000);
        model->setData(model->index(row,2), qrand()%1000+1000);
        model->setData(model->index(row,3), qrand()%1000+1000);
    }

    ui->tableView->horizontalHeader()->setVisible(true);//顯示或隱藏表頭
    ui->tableView->verticalHeader()->setVisible(false);//顯示或隱藏序列行

    ui->tableView->setAutoScroll(true);//自動滾動條
    //ui->tableView->resizeColumnsToContents(); //根據內容調整大小
    ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//根據容器調整大小
    ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);//只讀
    ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); //設置選中模式爲選中行
    ui->tableView->setSelectionMode( QAbstractItemView::SingleSelection); //設置選中單行
    ui->tableView->setModel(model); //使用

}

MainWindow::~MainWindow()
{
    delete ui;
}

運行截圖

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章