QTableWidget 设置列宽样式

一、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);

效果如下图所示:第三列为根据内容自适应大小,前两列均分剩余空间。

二、动态添加或删除对应的行

/*************************************************
* @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;
        }
    }
}

如下图,点击 +按钮将会在表格末尾添加新的行,点击- 按钮会删除改行

posted @ 2024-08-14 11:34  Jeffxue  阅读(118)  评论(0编辑  收藏  举报