记录下QTableView常用的设置封装,QTableWidget便利类继承自QTableView,所以下面这些也支持QTableWidget使用。
void MyTableView::initTableView(QTableView *tableView, int rowHeight, bool headVisible/*表头可见*/, bool edit/*可否编辑*/)
{
// ------------表头相关
// 垂直表头是否可见
tableView->verticalHeader()->setVisible(headVisible);
// 设置水平表头为左对齐
tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);
// 设置垂直表头为底对齐
tableView->verticalHeader()->setDefaultAlignment(Qt::AlignBottom);
// 固定表格宽度不可扩展,不可手动调整宽度
tableView->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed);
// 表格宽度随内容自动扩展
tableView->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
// 表格宽度自动根据UI进行计算,不可手动调整宽度
tableView->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);
// 选中一行表头是否加粗
tableView->horizontalHeader()->setHighlightSections(false);
// 最后一行拉伸填充
tableView->horizontalHeader()->setStretchLastSection(true);
// 行标题最小宽度尺寸
tableView->horizontalHeader()->setMinimumSectionSize(0);
// 行标题最大高度
tableView->horizontalHeader()->setMaximumHeight(rowHeight);
// 默认行高
tableView->verticalHeader()->setDefaultSectionSize(rowHeight);
// 隐藏默认行号
tableView->verticalHeader()->setHidden(true);
// 表头不可单击
tableView->horizontalHeader()->setSectionsClickable(false);
// ---------- 选择模式
// 选中时一行整体选中
tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
// 只允许选择单个
tableView->setSelectionMode(QAbstractItemView::SingleSelection);
// ---------- 图片及样式
// 设置icon尺寸大小
tableView->setIconSize(QSize(30, 30));
// 禁用拖拽,否则此处添加拖拽的话会生成两个item
tableView->setDragEnabled(false);
// 设置鼠标追踪
tableView->setMouseTracking(true);
// 奇数偶数行颜色交替
tableView->setAlternatingRowColors(false);
// 隐藏网格线
tableView->setShowGrid(false);
// 线的样式
tableView->setGridStyle(Qt::DotLine);
// 取消Item选中后的虚线边框
tableView->setFocusPolicy(Qt::NoFocus);
// ----------- 滚动条
// 显示/隐藏 垂直/水平 滑动条
tableView->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
/*水平setHorizontalScrollBarPolicy*/ /*关闭Qt::ScrollBarAlwaysOff*/
// 垂直滚动条设置为像素滚动
tableView->setVerticalScrollMode(QTableView::ScrollPerPixel);
// 设置滚动条步长(要先设置为像素滚动,才能生效;ITEM_HEIGHT为项的高度)
tableView->verticalScrollBar()->setSingleStep(ITEM_HEIGHT/3);
// 编辑模式
if (edit) {
tableView->setEditTriggers(QAbstractItemView::CurrentChanged | QAbstractItemView::DoubleClicked);
} else {
tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
}
}