一、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;
}
}
}
如下圖,點選 +
按鈕將會在表格末尾新增新的行,點選-
按鈕會刪除改行