QT学习笔记---表格
参考文章:https://cloud.tencent.com/developer/article/2372683
enum{ctName = 0,ctSex,ctBirth,ctNation,ctPartyM,ctScore,};enum {colName = 0,colSex,colBirth,colNation,colPartyM,colScore};
void MainWindow::createItemsARow(int rowNo, QString name, QString sex, QDate birth, QString nation, bool isPM, int score)
{QTableWidgetItem *item;QString str;uint StudID = 1001;// 姓名item = new QTableWidgetItem(name, MainWindow::ctName);item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);StudID += rowNo;item->setData(Qt::UserRole, QVariant(StudID));ui->tableWidget->setItem(rowNo, MainWindow::colName, item);//性别item = new QTableWidgetItem(sex, MainWindow::ctSex);item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);ui->tableWidget->setItem(rowNo, MainWindow::colSex, item);//出生日期str = birth.toString("yyyy-MM-dd");item = new QTableWidgetItem(str, MainWindow::ctBirth);item->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter);ui->tableWidget->setItem(rowNo, MainWindow::colBirth, item);// 民族item = new QTableWidgetItem(nation, MainWindow::ctNation);item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);ui->tableWidget->setItem(rowNo, MainWindow::colNation, item);// 是否是党员item = new QTableWidgetItem("群众", MainWindow::ctPartyM);item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);if(isPM) {item->setCheckState(Qt::Checked);} else {item->setCheckState(Qt::Unchecked);}item->setBackground(Qt::yellow);ui->tableWidget->setItem(rowNo, MainWindow::colPartyM, item);// 分数str.setNum(score);item = new QTableWidgetItem(str, MainWindow::ctScore);item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);ui->tableWidget->setItem(rowNo, MainWindow::colScore, item);
}// 设置表头
void MainWindow::on_pushButton_clicked()
{QTableWidgetItem *headerItem;QStringList headerText_Row, headerText_Col;headerText_Row << "姓名" << "性别" << "出生日期" << "民族" << "是否是党员" << "分数";//设置水平表头ui->tableWidget->setHorizontalHeaderLabels(headerText_Row);ui->tableWidget->setColumnCount(headerText_Row.count());for(int i = 0; i < ui->tableWidget->columnCount(); ++i){headerItem = new QTableWidgetItem(headerText_Row.at(i));QFont font = headerItem->font();font.setBold(true);font.setPointSize(8);headerItem->setForeground(Qt::black);headerItem->setFont(font);ui->tableWidget->setHorizontalHeaderItem(i, headerItem);}
}// 设置行数
void MainWindow::on_pushButton_2_clicked()
{//读出spinBox中的数据,并设置到表格中ui->tableWidget->setRowCount(ui->spinBox->value());//行底色交替采用不同颜色ui->tableWidget->setAlternatingRowColors(true);
}// 初始化表格元素
void MainWindow::on_pushButton_4_clicked()
{QString strName, strSex;bool isParty = false;QDate birth;birth.setDate(1997,10,7);ui->tableWidget->clearContents(); //清除工作区中的内容,不清除表格int rows = ui->tableWidget->rowCount();for(int i = 0; i < rows; ++i) {strName = QString::asprintf("学生%d",i);if((i % 2) == 0){strSex = "男";} else {strSex = "女";}createItemsARow(i, strName, strSex, birth, "汉族", isParty, 70);//日期增加20天birth = birth.addDays(20);isParty = !isParty;}
}void MainWindow::on_pushButton_5_clicked()
{int current_row = ui->tableWidget->currentRow();ui->tableWidget->insertRow(current_row);
}void MainWindow::on_pushButton_7_clicked()
{int current_row = ui->tableWidget->currentRow();ui->tableWidget->removeRow(current_row);
}// 将表格中的内容读取到文本框
void MainWindow::on_pushButton_8_clicked()
{QString str;QTableWidgetItem *cellItem;ui->textEdit->clear();for(int i = 0; i < ui->tableWidget->rowCount(); ++i) {str = QString::asprintf("第%d行:",i+1);for(int j = 0; j < ui->tableWidget->columnCount()-1; j++) {cellItem = ui->tableWidget->item(i, j);str = str + cellItem->text() + " | ";}cellItem = ui->tableWidget->item(i, colPartyM);if(cellItem->checkState() == Qt::Checked) {str += "党员";} else {str += "群众";}ui->textEdit->append(str);}
}