(148)以下是设置界面按钮等组件的信号与槽函数 :
++设置表格窗体的水平表头中的条目 :
++设置表格窗体中的数据区的行数,不含水平行表头 :
++初始化表格组件中的数据 :
++上面的函数调用了 函数 createItemsARow(…),太长,以代码形式给出 :
//为一行的单元格创建 Items。本函根据形参中的数据为表格组件创建一行单元格。
void MainWindow::createItemsARow(int rowNo, QString name,
QString sex, QDate birth, QString nation, bool isPM, int score)
{
uint studID = 202105000; //学号基数。此处设为函数内静态变量也可以。
//姓名 //数据项类型为MainWindow::ctName //生成表格窗体中的一行中的姓名条目
//构造函数 QTableWidgetItem(const QString & text, int type = Type);
QTableWidgetItem * item = new QTableWidgetItem(name, MainWindow::ctName);
//这是定义在本类中的枚举量 enum MainWindow::CellType { ctName = 1000,
// ctSex , ctBirth , ctNation , ctPartyM, ctScore };
item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
studID += rowNo ; //学号 =基数 + 行号。表格窗体中的每个条目可以保存一个数据。
item->setData( Qt::UserRole, QVariant(studID) ); //设置 studID为用户数据
//virtual void QTableWidget::setData(int role, const QVariant & value);
ui->tableInfo->setItem(rowNo, MainWindow::colName, item);
//ui->tableInfo->setItem(rowNo, colName, item); 本类中定义的枚举量,也可直接使用
//void QTableWidget::setItem(int row, int column, QTableWidgetItem * item);
QIcon icon; //性别,生成表格窗体中的一行中的性别条目
if (sex == "男") icon.addFile(":/images/icons/boy.ico" );
else icon.addFile(":/images/icons/girl.ico");
item = new QTableWidgetItem(sex, MainWindow::ctSex); //type为MainWindow::ctSex
item->setIcon(icon); //给性别条目加个图片
item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
Qt::ItemFlags flags = Qt::ItemIsSelectable | Qt::ItemIsEnabled; //不允许编辑
//enum Qt::ItemFlag { .. ItemIsSelectable, ItemIsEditable, ItemIsDragEnabled, .. }
item->setFlags(flags);
ui->tableInfo->setItem(rowNo, MainWindow::colSex, item); //为单元格设置Item
QString str = birth.toString("yyyy-MM-dd"); //日期转换为字符串 //生成出生日期单元格
item = new QTableWidgetItem(str, MainWindow::ctBirth); //type为MainWindow::ctBirth
item->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter); //文本对齐格式
ui->tableInfo->setItem(rowNo, MainWindow::colBirth,item);
//民族 //type为MainWindow::ctNation //生成本行的民族单元格
item = new QTableWidgetItem(nation, MainWindow::ctNation);
item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
ui->tableInfo->setItem(rowNo, MainWindow::colNation, item);
//是否党员 //type为 MainWindow::ctPartyM //生成本行的党员单元格
item = new QTableWidgetItem("党员", MainWindow::ctPartyM);
item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
flags = Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled;
//不允许编辑,但可以由用户更改复选状态
item->setFlags(flags);
if (isPM) item->setCheckState(Qt::Checked );
else item->setCheckState(Qt::Unchecked);
//enum Qt::CheckState { Unchecked, PartiallyChecked, Checked };
item->setBackground( QBrush(Qt::yellow) ); //设置本单元格的背景颜色
ui->tableInfo->setItem(rowNo,MainWindow::colPartyM,item);
//QString & QString::setNum(int n, int base)
str.setNum(score); //设置本行的分数单元格 //type为MainWindow::ctPartyM
item = new QTableWidgetItem(str, MainWindow::ctScore);
item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
ui->tableInfo->setItem(rowNo, MainWindow::colScore, item);
}
(149)在当前行的位置插入一行,并完善此行的单元格。原行后移 :
++ 在本表格组件的末尾添加一行 :
++ 删除当前行 :
++
++ 读取表格内容到文本按钮 :
++ 表格可编辑按钮 :
++间隔行底色按钮 :
++显示水平表头与显示垂直表头按钮 :
++ 完成两个单选按钮,行选择与单元格选择 :
(150) 完善本程序的状态栏 :
++ 记录状态栏里这三个标签的来源,其内存维护,构造与析构,只要将其加入窗体里的容器里就可以 :
++
(151)接着完善 QTableWidget 的信号与槽函数 :
(152)
谢谢