void MainWindow::InitTableView()
{
// 创建模型 (22行 = 20数据行 + 2表头行,15列)
ViewModel = new QStandardItemModel(22, 15, this);
// 设置二级表头数据
// 确保第一行所有列都有item(包括空白单元格)
for (int col = 0; col < 15; ++col) {
// 创建所有单元格的item
QStandardItem *item = new QStandardItem();
ViewModel->setItem(0, col, item);
// 只在特定列设置文本
if (col == 7) {
item->setText(QStringLiteral("磐石"));
} else if (col == 10) {
item->setText(QStringLiteral("本地"));
}
}
// 合并表头单元格
ui->MainTableView->setSpan(0,0,2,1);
ui->MainTableView->setSpan(0,1,2,1);
ui->MainTableView->setSpan(0,2,2,1);
ui->MainTableView->setSpan(0,3,2,1);
ui->MainTableView->setSpan(0,4,2,1);
ui->MainTableView->setSpan(0,5,2,1);
ui->MainTableView->setSpan(0,6,2,1);
ui->MainTableView->setSpan(0,13,2,1);
ui->MainTableView->setSpan(0,14,2,1);
ui->MainTableView->setSpan(0, 7, 1, 3); // 第一组 (8-10列)
ui->MainTableView->setSpan(0, 10, 1, 3); // 第二组 (11-13列)
// 第二行表头(各列标题)
ViewModel->setItem(0, 0, new QStandardItem(QStringLiteral("序号")));
ViewModel->setItem(0, 1, new QStandardItem(QStringLiteral("图号")));
ViewModel->setItem(0, 2, new QStandardItem(QStringLiteral("图纸版本")));
ViewModel->setItem(0, 3, new QStandardItem(QStringLiteral("零部件名称")));
ViewModel->setItem(0, 4, new QStandardItem(QStringLiteral("特性编码")));
ViewModel->setItem(0, 5, new QStandardItem(QStringLiteral("名称")));
ViewModel->setItem(0, 6, new QStandardItem(QStringLiteral("特性状态")));
ViewModel->setItem(1, 7, new QStandardItem(QStringLiteral("类别")));
ViewModel->setItem(1, 8, new QStandardItem(QStringLiteral("规格")));
ViewModel->setItem(1, 9, new QStandardItem(QStringLiteral("图纸位置")));
ViewModel->setItem(1, 10, new QStandardItem(QStringLiteral("类别")));
ViewModel->setItem(1, 11, new QStandardItem(QStringLiteral("规格")));
ViewModel->setItem(1, 12, new QStandardItem(QStringLiteral("图纸位置")));
ViewModel->setItem(0, 13, new QStandardItem(QStringLiteral("同步状态")));
ViewModel->setItem(0, 14, new QStandardItem(QStringLiteral("操作")));
// 添加表格视图
ui->MainTableView->setModel(ViewModel);
// 隐藏默认表头
ui->MainTableView->horizontalHeader()->setVisible(false);
ui->MainTableView->verticalHeader()->setVisible(false);
// 合并表头单元格
ui->MainTableView->setSpan(0,0,2,1);
ui->MainTableView->setSpan(0, 7, 1, 3); // 第一组 (8-10列)
ui->MainTableView->setSpan(0, 10, 1, 3); // 第二组 (11-13列)
// 设置统一的行高(25像素)
const int rowHeight = 25;
for (int row = 0; row < 22; ++row) {
ui->MainTableView->setRowHeight(row, rowHeight);
}
// 设置表头样式 - 确保所有表头单元格都设置为灰色背景且不可编辑
for (int row = 0; row < 2; ++row) { // 处理前两行(表头行)
for (int col = 0; col < 15; ++col) {
if (QStandardItem *item = ViewModel->item(row, col)) {
// 设置文本居中对齐
item->setTextAlignment(Qt::AlignCenter);
// 设置灰色背景
if (row == 0) {
item->setBackground(QBrush(QColor(240, 240, 240))); // 深灰色
} else {
item->setBackground(QBrush(QColor(240, 240, 240))); // 中灰色
}
// 设置为不可编辑
item->setFlags(item->flags() & ~Qt::ItemIsEditable);
// 设置为不可选择
item->setFlags(item->flags() & ~Qt::ItemIsSelectable);
}
}
}
//设置列宽
ui->MainTableView->setColumnWidth(0, 60); // 序号
ui->MainTableView->setColumnWidth(1, 160); // 图号
ui->MainTableView->setColumnWidth(2, 70); // 图纸版本
ui->MainTableView->setColumnWidth(3, 90); // 零部件名称
ui->MainTableView->setColumnWidth(4, 70); // 特性编码
ui->MainTableView->setColumnWidth(5, 180); // 名称
ui->MainTableView->setColumnWidth(6, 70); // 特性状态
ui->MainTableView->setColumnWidth(7, 90); // 类别
ui->MainTableView->setColumnWidth(8, 180); // 规格
ui->MainTableView->setColumnWidth(9, 90); // 图纸位置
ui->MainTableView->setColumnWidth(10, 70); // 类别
ui->MainTableView->setColumnWidth(11, 180); // 规格
ui->MainTableView->setColumnWidth(12, 90); // 图纸位置
ui->MainTableView->setColumnWidth(13, 70); // 同步状态
ui->MainTableView->setColumnWidth(14, 90); // 操作
// 设置圆点与三角形
ui->ConsistencyRadioLabel->setText(QStringLiteral(
"<html>"
"<span style='color: green;'>●</span>" // 绿色圆点
" 一致" // 默认颜色的文本
"</html>"));
ui->ConsistencyRadioLabel->setText(QStringLiteral(
"<html>"
"<span style='color: green;'>●</span>" // 绿色圆点
" 一致" // 默认颜色的文本
"</html>"));
// 设置圆点与三角形 "▲ 上三角形 (U+25B2)\n" KeyFeatureLabel
ui->NonConsistencyRadioLabel->setText(QStringLiteral(
"<html>"
"<span style='color: red;'>●</span>" // 红色圆点
" 不一致" // 默认颜色的文本
"</html>"));
ui->KeyFeatureLabel->setText(QStringLiteral(
"<html>"
"<span style='color: black;'>▲</span>" // 黑色三角
" 关键特性" // 默认颜色的文本
"</html>"));
ui->KeyFeatureLabel_1->setText(QStringLiteral(
"<html>"
"<span style='color: none;'>△</span>" // 无色三角
" 重要特性" // 默认颜色的文本
"</html>"));
QString BtnStyle = QStringLiteral("QPushButton {"
"border: 2px solid #a0a0a0;" // 设置边框颜色
"border-style: outset;" // 设置为凸起样式
"padding: 5px;" // 设置内边距
"}"
"QPushButton:pressed {"
"border-style: inset;" // 按下时边框变为凹陷
"}");
ui->LoadBtn->setStyleSheet(BtnStyle);
ui->RefreshBtn->setStyleSheet(BtnStyle);
ui->ReleaseBtn->setStyleSheet(BtnStyle);
ui->ReviewBtn->setStyleSheet(BtnStyle);
ui->SaveBtn->setStyleSheet(BtnStyle);
ui->UpdateBtn->setStyleSheet(BtnStyle);
ui->UploadBtn->setStyleSheet(BtnStyle);
ui->jumpToRockBtn->setStyleSheet(BtnStyle);
}在这个程序里设置上下滚轮滚动时,水平表头不动,数据行动