目录
0.背景
项目需要,我有一个自定义的类Steer_Electrode_Table,是一个QTableView;
记录一下QTableView修改前后的样式,仅供参考
看一下我修改前后的样式对比

1.详细代码
cpp
void Steer_Electrode_Table::initTable() {
// 设置模型
setModel(m_model);//.h定义:QStandardItemModel* m_model;
// 设置表头
QStringList headers;
headers << "序号" << "电极名称" << "电极型号" << "宏触点数量" << "微触点数量" << "植入区域" << "操作";
m_model->setHorizontalHeaderLabels(headers);
// 隐藏垂直表头
verticalHeader()->setVisible(false);
// 设置选择行为
setSelectionBehavior(QAbstractItemView::SelectRows);
setSelectionMode(QAbstractItemView::SingleSelection);
// 设置每一列固定宽度
setColumnWidth(0, 56);
setColumnWidth(1, 80);
setColumnWidth(2, 184);
setColumnWidth(3, 84);
setColumnWidth(4, 84);
setColumnWidth(5, 450);
setColumnWidth(6, 72);
horizontalHeader()->setStretchLastSection(false);//不自动拉伸最后一列
//表格样式
// 设置表格样式
this->setStyleSheet(
"QTableView {"
" background: transparent;"
" font-size: 14px;"
" font-family: Microsoft YaHei;"
" border: none;"
" outline: none;"
"}"
"QTableView::item {"
" border:0px solid rgb(0,0,0);"
" border-bottom:2px solid #272727;"//表格行与行之间的间隔线
" padding: 5px;"
" background: #424242;"
"}"
"QTableView::item:selected {"
" background: #7A9165;"
" color: #FFFFFF;"
" border-bottom: 2px solid #272727 !important;"//表格行与行之间的间隔线
"}"
"QHeaderView {"
" background-color: transparent;"
"}"
"QHeaderView::section {"
" background-color: #343434;"
" color: #b8b8b8;"
" font-size: 14px;"
" font-family: Microsoft YaHei;"
" padding: 5px;"
" border: none;"
" border-bottom: 2px solid #272727;"//表头与表格之间的横线
"}"
);
// 其他非样式表设置
this->setShowGrid(false); // 彻底关闭网格线绘制,用于隐藏列间隔线
this->setFocusPolicy(Qt::NoFocus);
this->horizontalHeader()->setHighlightSections(false); // 选中行时表头不高亮
this->setEditTriggers(QAbstractItemView::NoEditTriggers); // 禁止编辑
// 设置高度
this->verticalHeader()->setDefaultSectionSize(48); // 行高
this->horizontalHeader()->setFixedHeight(48); // 表头高度
}
表格文字居中我是在另一个函数中写的
cpp
QStandardItem *Steer_Electrode_Table::setNameItem(const QString &text)
{
QStandardItem* item = new QStandardItem(text);
item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); // 居中
return item;
}
//点击某按钮,触发增加一行的操作
void Steer_Electrode_Table::addRow(const QString& name, const QString& model, int macroCount, int microCount, const QString& region) {
int row = m_model->rowCount();
// 添加行数据
m_model->insertRow(row);
// 序号列,从1开始
QStandardItem* indexItem = new QStandardItem(QString::number(row + 1));
indexItem->setTextAlignment(Qt::AlignCenter);
indexItem->setEditable(false);
m_model->setItem(row, 0, indexItem);
// 其他数据列,调用setNameItem使文字居中
m_model->setItem(row, 1, setNameItem(name));
m_model->setItem(row, 2, setNameItem(model));
m_model->setItem(row, 3, setNameItem(QString::number(macroCount)));
m_model->setItem(row, 4, setNameItem(QString::number(microCount)));
m_model->setItem(row, 5, setNameItem(region));
// 操作按钮列
setIndexWidget(m_model->index(row, 6), createButtonWidget());
}
参考:
qt中tableWidget中只有行线,没有列线_qt tablewidget 设置表格线-CSDN博客
因为有一些自定义的操作,所以没有附上全部代码,主要还是以参考表格样式为主,有什么问题可以评论区或私信,看到都会回
--END--