使用QSqlQueryModel创建交替背景色的表格模型

python 复制代码
class UserModel(QSqlQueryModel):
    def __init__(self):
        super().__init__()
        self._query = "SELECT name, age FROM users"
        self.refresh()

    def refresh(self):
        self.setQuery(self._query)

    # 重新定义data()方法
    def data(self, index, role):   
        if role == Qt.BackgroundRole :  # 如果角色是背景色
            if index.row() % 2 == 0:    # 偶数行
                return QColor("#a0a0a0")
            else:
                return QColor("#f0f0f0")
        return super().data(index, role)   # 其余角色继承父类的data()方法

这段代码重新定义模型的data()方法,接收参数 index 和 role。如果 role 的值等于 Qt.BackgroundRole,表示设置背景色。如果 index 的行索引值除以 2 的余数为 0,即偶数行,返回颜色对象 QColor ("#a0a0a0"),否则返回 QColor ("#f0f0f0")。如果 role 不是 Qt.BackgroundRole,就调用父类的 data 方法并返回结果。

利用这个方法,可以实现一些其他的特制显示,比如,在上面的基础上增加一个功能:判断一个单元格的数字是否大于某一个设定值,如果大于设定值就显示为红色:

python 复制代码
class UserModel(QSqlQueryModel):
    def __init__(self):
        super().__init__()
        self._query = "SELECT name, age FROM users"
        self.refresh()

    def refresh(self):
        self.setQuery(self._query)

    def data(self, index, role):
        if role == Qt.BackgroundRole :  # 检查是否是背景颜色角色
            if index.row() % 2 == 0:
                return QColor("#a0a0a0")
            else:
                return QColor("#f0f0f0")
        elif role == Qt.ForegroundRole:  # 检查是否是文字颜色角色
            if index.column() == 1:  # 检查是否是 age 列
                value = self.record(index.row()).value(index.column())  # 获取单元格的值

                try:
                # 尝试将值转换为浮点数进行比较
                    if float(value) > 10:
                        return QColor(Qt.red)  # 如果大于设定值,返回红色
                except (ValueError, TypeError):
                    # 如果值不能转换为浮点数,忽略颜色设置
                    pass


        return super().data(index, role)
相关推荐
老纪的技术唠嗑局1 小时前
超级干货分享:中小企业使用 OceanBase 实践经验汇总
数据库
CLOUD ACE1 小时前
谷歌云代理|零售商Target 如何利用 Spanner Graph 提升零售发现体验并将数据库维护成本降低 50%
数据库·零售
AI大模型-小雄2 小时前
Codex写分页接口为什么越翻越慢?用Cursor Pagination解决重复与漏数据
大数据·数据库·elasticsearch·搜索引擎·chatgpt·后端开发·codex
少晓年2 小时前
从 MySQL 迁移到人大金仓 KingbaseES:完整指南与实践
数据库·mysql
SelectDB3 小时前
Apache Doris AI RAG 实战:从基础 RAG 到知识图谱增强的技术能力与选型
数据库
SelectDB3 小时前
电商企业 PostgreSQL 迁移 Apache Doris:80TB 分析数据统一平台技术能力与实践
数据库
SelectDB3 小时前
阶跃星辰 Agent 可观测:Apache Doris / SelectDB 的技术能力与实践
数据库
SelectDB3 小时前
ApacheDoris Iceberg V3 湖仓 DML:Apache Doris / SelectDB 的技术能力与实践
数据库
SelectDB3 小时前
ApacheDoris Python UDF:SQL 调用 Python 的技术能力、选型对比与实践
数据库
Crazy________4 小时前
Redis03:持久化存储,大key分析,主从复制及哨兵模式
数据库·redis·容器