重写了一下QTableWidget类
外观设置
setSelectionMode(QAbstractItemView::NoSelection); // 不可选中
setFocusPolicy(Qt::NoFocus); //去除选中虚线框
setRowCount(4); // 设置行数
setColumnCount(2); // 设置列数
QStringList rowlist;
heard << "电阻" << "反嵌" << "绝缘" << "交耐";
setVerticalHeaderLabels(rowlist); // 设置垂直方向表头
//setHorizontalHeaderLabels(list); // 水平方向表头
//verticalHeader()->hide(); // 隐藏垂直方向表头
//horizontalHeader()->hide(); // 隐藏水平方向表头
// 以下要在设置完表头后再调用
horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); // 横向自动拉伸
horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed); // 对第0列单独设置固定宽度
setColumnWidth(0, 100); // 设置列宽
verticalHeader()->setDefaultSectionSize(30) // 设置行高
verticalHeader()->setSectionResizeMode(QHeaderView::Stretch); // 纵向自动拉伸
合并表头
我也百度了一下, 可以通过窗口嵌套 重写QHeaderView类来实现表头合并, 但我觉得太麻烦了. 不如直接合并单元格, 把单元格当做表头, 效果就是下面这样.
// 合并单元格
setSpan(0, 0, 1, 2); // 第几行 第几列 占几行 占几列
setRowHidden(0, true); // 设置是否隐藏第一行(表头)
单元格设置
设置好table后还要在每个单元格插入item或者其他控件才能使用.
for (int num; num < rowlist.size(); num++) {
QTableWidgetItem *item = new QTableWidgetItem;
item->setTextAlignment(Qt::AlignCenter); // 内容居中
item->setFlags(item->flags() & (~Qt::ItemIsEditable)); // 不可编辑
item->setText(rowlist.at(num));
setItem(num, 0, item); // 设置item
}
QDoubleSpinBox *spin = new QDoubleSpinBox;
spin->setAlignment(Qt::AlignCenter);
spin->setDecimals(dec);
setCellWidget(id, 1, spin); // 插入一个QDoubleSpinBox 用来输入数值
// 内容改后根据内容设置不同的字体 颜色
item(row, 1)->setTextColor(QColor("black"));
item(row, 1)->setFont(QFont(font().family(), font().pointSize() + 5));
一些零碎的知识点代码
int row = tableWidget->rowCount();//获取表格中当前总行数
tableWidget->setRowCount(row+1);//添加一行
tableWidget->removeRow(row);//清除已有的行列
Int row1 = tableWidget->currentItem()->row();//当前选中行
bool focus = tableWidget->isItemSelected(tableWidget->currentItem());//判断是否选中一行
QString proName = tableWidget->item(row, col)->text();//获取某一格内容
setShowGrid(true);//显示表格线
verticalHeader()->setVisible(false);//隐藏左边垂直
QHeaderView *headerView = horizontalHeader();
headerView->setMovable(false);//去除表头的移动
headerView->resizeSection(0,284);//设置第一列宽
headerView->resizeSection(1,127);//设置第二列宽
headerView->setResizeMode(QHeaderView::Fixed);//列表不能移动
headerView->setClickable(false);//不响应鼠标单击
setEditTriggers(QTableWidget::NoEditTriggers);//不能编辑
setSelectionBehavior(QTableWidget::SelectRows);//一次选中一行
setSelectionMode(QAbstractItemView::SingleSelection);//只能单选
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平滚动条
setVerticalScrollMode(QAbstractItemView::ScrollPerItem);//垂直滚动条按项移动
setAutoScroll(false);//去掉自动滚动
//根据表格内容增加行高
connect(ui->tableWidget,SIGNAL(itemChanged(QTableWidgetItem*)),
ui->tableWidget,SLOT(resizeRowsToContents()));