记录一个QTableWiget的坑
QT 5.9 C++ 开发指南
samp4_9
初始化数据时,不设置表的行数,不会显示
就算手动设置rows = 2,也不会显示
后续设置表行数按钮应该会设置!
void MainWindow::on_btnIniData_clicked()
{
//初始化表格内容
QString strName,strSex;
bool isParty = false;
QDate birth;
birth.setDate(1980,4,7);//初始化一个日期
ui->tableInfo->clearContents();//只清除工作区,不清除表头
// ui->tableInfo->setRowCount(1);不设置表的行数,不会显示
int Rows = ui->tableInfo->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);
birth=birth.addDays(20);
isParty=!isParty;
}
}
void MainWindow::createItemsARow(int rowNo, QString Name, QString Sex,
QDate birth, QString Nation, bool isPM, int score)
{
//为一行的单元格创建Items
QTableWidgetItem *item;
QString str;
uint StudID=201605000;//学号基数
//姓名
item = new QTableWidgetItem(Name,MainWindow::ctName);
item->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
StudID += rowNo;//学号=基数+行号
item->setData(Qt::UserRole,QVariant(StudID));//设置stuID为data ,自定义数据
ui->tableInfo->setItem(rowNo,MainWindow::colName,item);
//性别
QIcon icon;
if(Sex=="男"){
icon.addFile(":/images/icons/boy.ico");
}
else{
icon.addFile(":/images/icons/girl.ico");
}
item = new QTableWidgetItem(Sex,MainWindow::ctSex);
item->setIcon(icon);
item->setTextAlignment(Qt::AlignHCenter |
Qt::AlignVCenter);
ui->tableInfo->setItem(rowNo,MainWindow::colSex,item);
//出生日期
str = birth.toString("yyyy-MM-dd");//日期转换为字符串
item = new QTableWidgetItem(str,MainWindow::ctBirth);
item->setTextAlignment(Qt::AlignLeft |
Qt::AlignVCenter);
ui->tableInfo->setItem(rowNo,MainWindow::colBirth,item);
//民族
item = new QTableWidgetItem(Nation,MainWindow::ctNation);
item->setTextAlignment(Qt::AlignHCenter |
Qt::AlignVCenter);
ui->tableInfo->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->setBackgroundColor(Qt::yellow);
ui->tableInfo->setItem(rowNo,MainWindow::colPartyM,item);
//分数
str.setNum(score);
item = new QTableWidgetItem(str,MainWindow::ctScore);
item->setTextAlignment(Qt::AlignHCenter |
Qt::AlignVCenter);
ui->tableInfo->setItem(rowNo,MainWindow::colScore,item);
}