【QT】QTableView自定义样式:仅显示行间隔、隐藏列间隔、表头样式、表格样式、单行选中等

目录

0.背景

1.详细代码


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--

相关推荐
金色熊族33 分钟前
解析QTransform的用法
qt
追烽少年x3 小时前
Qt多线程编程:QThread与QtConcurrent的对比与应用
qt
小短腿的代码世界18 小时前
Qt实时盈亏计算深度解析:从持仓数据到动态盈亏展示
开发语言·qt
Python私教19 小时前
GenericAgent PySide6 桌面应用深度解析:悬浮按钮 + 聊天面板的原生 Qt 方案
开发语言·数据库·qt
用户8055336980319 小时前
现代Qt开发教程(新手篇)1.11——定时器
c++·qt
小短腿的代码世界21 小时前
Qt券商接口封装深度解析:统一API设计与多源适配
开发语言·qt·单元测试
T0uken21 小时前
基于 vcpkg 与 LLVM-MinGW 的 Qt6 静态链接开发方案
c++·windows·qt
Ulyanov1 天前
《现代 Python 桌面应用架构实战:PySide6 + QML 从入门到工程化》 开发环境搭建与工具链极简主义 —— 拒绝臃肿,构建工业级基座
开发语言·python·qt·ui·架构·系统仿真
(Charon)1 天前
【C++/Qt】Qt 实现 MQTT 测试工具:连接 Broker、订阅主题与发布消息
开发语言·c++·qt
Ulyanov1 天前
《现代 Python 桌面应用架构实战:PySide6 + QML 从入门到工程化》:动态数据仪表盘与 NumPy 可视化 —— 从标量到向量的数据驱动进化
开发语言·python·qt·架构·numpy