一、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;}}
}
如下图,点击 +
按钮将会在表格末尾添加新的行,点击-
按钮会删除改行