文章目录
0 表格设置
//设置表格的样式
ui->tableWidget->verticalHeader()->hide();
ui->tableWidget->horizontalHeader()->setDefaultAlignment(Qt::AlignHCenter);//表头字体居中
ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//单元格不可编辑
ui->tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::section{background:rgb(2,20,130);color: white;}");//设置表头背景和字体颜色
ui->tableWidget->verticalHeader()->setDefaultSectionSize(40); //设置行高
ui->tableWidget->horizontalHeader()->setStretchLastSection(true); //均分各列
ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//列可扩展
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);//设置整行选中
//让tableWidget内容中的每个元素居中
for (int i=0;i<5;i++)
{
for (int j=0;j<8;j++)
{
ui->tableWidget->item(i,j)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
}
}
1 添加 QCombox
//tablewidget中存储combox等
// ui.tableWidget->setRowCount(0);//设置行数
ui.tableWidget->setAlternatingRowColors(true); //设置隔行显示颜色
ui.tableWidget->horizontalHeader()->setDefaultAlignment(Qt::AlignHCenter);//表头字体居中
//ui.tableWidget->horizontalHeader()->setStretchLastSection(true); //均分各列
ui.tableWidget->resizeRowsToContents();
ui.tableWidget->verticalHeader()->setHidden(true);
//ui.tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::section{background-color:rgb(40,143,218);font:8pt '宋体'};");
int width = this->width() / 6;
//设置列宽
ui.tableWidget->setColumnWidth(0, width);
ui.tableWidget->setColumnWidth(1, width);
ui.tableWidget->setColumnWidth(2, width);
ui.tableWidget->setColumnWidth(3, width);
ui.tableWidget->setColumnWidth(4, this->width()-width*4);
添加QCombox
int row = ui.tableWidget->rowCount();
QComboBox * cb = new QComboBox;
cb->addItem(QStringLiteral("xx1")); //0
cb->addItem(QStringLiteral("xx2")); //1
cb->addItem(QStringLiteral("xx3"));//2
//插入一行
ui.tableWidget->insertRow(row);
ui.tableWidget->setCellWidget(row, 0, cb);
删除一行
int row = ui.tableWidget->currentRow();
if (row != -1)
{
ui.tableWidget->removeRow(row);
}
2 取出QComboBox的值
QComboBox * cb_type = (QComboBox *)ui.tableWidget->cellWidget(i, 1); //类型
3 添加QCheckBox 方式一
QCheckBox * cbox = new QCheckBox;
int row = ui.tw_combat_unit->rowCount();
ui.tw_combat_unit->insertRow(row);
ui.tw_combat_unit->setItem(row, 0, new QTableWidgetItem(QString::fromStdString(name)));
ui.tw_combat_unit->setCellWidget(row, 1, (QWidget *)cbox);
//单元格内容居中
ui.tw_combat_unit->item(row, 0)->setTextAlignment(Qt::AlignCenter);
4 添加QCheckBox 方式二
QTableWidgetItem *check = new QTableWidgetItem("50%");
check->setCheckState(Qt::Checked);
QCheckBox * cbox = new QCheckBox;
int row = ui.tw_target->rowCount();
qDebug() << row;
ui.tw_target->insertRow(row);
ui.tw_target->setItem(row, 0, new QTableWidgetItem(QString::fromStdString(name)));
//ui.tw_target->setCellWidget(row, 1, (QWidget *)cbox);
ui.tw_target->setItem(row, 1, check);
ui.tw_target->item(row, 0)->setTextAlignment(Qt::AlignCenter);
4 添加QCheckBox 方式3
QCheckbox 居中在单元格中显示,并且可以遍历访问
QCheckBox * cbox = new QCheckBox(this); //创建checkbox
cbox->setCheckState(Qt::Checked); //设置状态
QWidget * w = new QWidget(this);//创建一个widget
QHBoxLayout * hLayout = new QHBoxLayout; //创建布局
hLayout->addWidget(cbox);//添加checkbox
hLayout->setMargin(0);//设置边缘距离
hLayout->setAlignment(cbox, Qt::AlignCenter);//居中
w->setLayout(hLayout);
int row = ui.tw_combat_unit->rowCount();
ui.tw_combat_unit->insertRow(row);
ui.tw_combat_unit->setItem(row, 0, new QTableWidgetItem(QString::fromStdString(name)));
ui.tw_combat_unit->setCellWidget(row, 1, w); //将widget放到table中
ui.tw_combat_unit->item(row, 0)->setTextAlignment(Qt::AlignCenter);
遍历访问QCheckBox
//对数据进行设置
for (int i = 0; i < ui.tw_target->rowCount(); i++)
{
QWidget * w = ui.tw_target->cellWidget(i, 1);
QCheckBox * cb = (QCheckBox*)w->children().at(1);
if (cb)
{
if (cb->checkState() == Qt::Checked)
{
qDebug() << "checked.";
}
}
}
5 删除表格中所有的行
while(ui.tw_mission_seq->rowCount() > 0)
{
int row = ui.tw_mission_seq->rowCount();
if (row > 0)
{
ui.tw_mission_seq->removeRow(row-1);
}
}