QTableWidget 設定列寬樣式

Jeffxue發表於2024-08-14

一、QTableWidget 有時需要設定表格的列寬樣式,設定方式如下:

    // 設定豎直表頭不可見
    ui.tableWidget->verticalHeader()->setVisible(false);
    // 設定水平表頭不可見
    ui.tableWidget->horizontalHeader()->setVisible(false);
    // 設定列數
    ui.tableWidget->setColumnCount(3);

    // 設定所有的列鋪滿整個Table,每列寬度相同
    //ui.tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeMode::Stretch);

    //設定第1和第2列為自動縮放填充寬度,第3列的寬度為自適應內容的寬度
    ui.tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeMode::Stretch);
    ui.tableWidget->horizontalHeader()->setSectionResizeMode(1, QHeaderView::ResizeMode::Stretch);
    ui.tableWidget->horizontalHeader()->setSectionResizeMode(2, QHeaderView::ResizeMode::ResizeToContents);

效果如下圖所示:第三列為根據內容自適應大小,前兩列均分剩餘空間。

QTableWidget 設定列寬樣式

二、動態新增或刪除對應的行

/*************************************************
* @brief  新增行
*************************************************/
void AddNewRow()
{
    QLineEdit* paramNameEdit = new QLineEdit();
    QLineEdit* paramValueEdit = new QLineEdit();
    QPushButton* btnDelete = new QPushButton("-");

    int rowCount = ui.tableWidget->rowCount();
    // 在表格的末尾新增新的行
    ui.tableWidget->insertRow(rowCount);

    // 將控制元件新增到對應的行列位置上
    ui.tableWidget->setCellWidget(rowCount, 0, paramNameEdit);
    ui.tableWidget->setCellWidget(rowCount, 1, paramValueEdit);
    ui.tableWidget->setCellWidget(rowCount, 2, btnDelete);

    // 可設定控制元件對應的屬性,類似於tag,便於後續查詢。
    //btnDelete->setProperty("rowIndex", rowCount); 

    connect(btnDelete, &QPushButton::clicked, this, &Demo14_TableWidget::OnDeleteBtnClicked);
}

/*************************************************
* @brief  查詢當前被點選的行,刪除對應行
*************************************************/
void DeleteSelectedRow()
{
    // 查詢刪除按鈕所在的行,並將這一行全部刪除掉
    QPushButton* btn = qobject_cast<QPushButton*>(sender());

    for(int row = 0; row < ui.tableWidget->rowCount(); row++)
    {
        QWidget *itemWidget = ui.tableWidget->cellWidget(row, 2);
        QPushButton* itemBtn = qobject_cast<QPushButton*>(itemWidget);

        if(itemWidget == btn)
        {
            ui.tableWidget->removeRow(row);
            return;
        }
    }
}

如下圖,點選 +按鈕將會在表格末尾新增新的行,點選- 按鈕會刪除改行
QTableWidget 設定列寬樣式

相關文章