1.运行效果如下,有同感的可以继续往下看看
2.设置列数和列宽度
ui->tableWidget->setColumnCount(4);
ui->tableWidget->setColumnWidth(0, 100);
ui->tableWidget->setColumnWidth(1, 100);
ui->tableWidget->setColumnWidth(2, 50);
ui->tableWidget->setColumnWidth(3, 30);
3.设置表头
QStringList headerTextList;
headerTextList << QStringLiteral("类型") << QStringLiteral("名称") << QStringLiteral("值") << QStringLiteral("操作");
ui->tableWidget->setHorizontalHeaderLabels(headerTextList);
ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed);
ui->tableWidget->horizontalHeader()->setSectionsClickable(false);
ui->tableWidget->horizontalHeader()->setSectionsMovable(false);
ui->tableWidget->horizontalHeader()->setFixedHeight(30);
4.设置其他
ui->tableWidget->setSelectionMode(QAbstractItemView::NoSelection);
ui->tableWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);//需要设置这个属性,否则滚动条有bug
5.连接信号
connect(ui->add_button, &QPushButton::clicked, this, &TableDemo::SlotAdd);
void TableDemo::SlotAdd()
{
int rows = ui->tableWidget->rowCount();
ui->tableWidget->insertRow(rows);
CreateRow(rows);
}
6.其他函数
//点击表格中删除按钮
void TableDemo::SlotDelete()
{
QPushButton* cellWidget = qobject_cast<QPushButton*>(sender());
int index = GetRowIndex(3, cellWidget);
if (index < 0)
return;
ui->tableWidget->removeRow(index);
}
//新建一行
void TableDemo::CreateRow(int row)
{
ui->tableWidget->setRowHeight(row, 30);
ui->tableWidget->setCellWidget(row, 0, CreateTypeComboBox());
ui->tableWidget->setCellWidget(row, 1, CreateNameLineEdit());
ui->tableWidget->setCellWidget(row, 2, CreateValueButton());
ui->tableWidget->setCellWidget(row, 3, CreateDeleteButton());
}
//获取操作的是哪一行
int TableDemo::GetRowIndex(int column, QWidget* widget)
{
int rowCount = ui->tableWidget->rowCount();
for (int i = 0; i < rowCount; ++i)
{
QWidget* pCell = ui->tableWidget->cellWidget(i, column);
if (pCell == widget)
return i;
}
return -1;
}
//创建表格中的下拉框
QWidget* TableDemo::CreateTypeComboBox()
{
QComboBox* comboBox = new QComboBox(ui->tableWidget);
comboBox->addItem(QStringLiteral("请选择"));
return comboBox;
}
//创建表格中的输入框
QWidget* TableDemo::CreateNameLineEdit()
{
QLineEdit* lineEdit = new QLineEdit(ui->tableWidget);
lineEdit->setText(QString("%1").arg(++m_iIndex));//m_iIndex成员变量,初始值0
return lineEdit;
}
//创建表格中的值输入按钮
QWidget* TableDemo::CreateValueButton()
{
QPushButton* pButton = new QPushButton(ui->tableWidget);
pButton->setCursor(Qt::PointingHandCursor);
pButton->setText(QStringLiteral("设置"));
return pButton;
}
//创建表格中的删除按钮
QWidget* TableDemo::CreateDeleteButton()
{
QPushButton* pButton = new QPushButton(ui->tableWidget);
pButton->setCursor(Qt::PointingHandCursor);
pButton->setText(QStringLiteral("删"));
connect(pButton, &QPushButton::clicked, this, &TableDemo::SlotDelete);
return pButton;
}