使用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)
相关推荐
C***11506 分钟前
Spring TransactionTemplate 深入解析与高级用法
java·数据库·spring
+VX:Fegn089521 分钟前
计算机毕业设计|基于springboot + vue建筑材料管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
2301_8002561124 分钟前
B+树:数据库的基石 R树:空间数据的索引专家 四叉树:空间划分的网格大师
数据结构·数据库·b树·机器学习·postgresql·r-tree
大厂技术总监下海1 小时前
用户行为分析怎么做?ClickHouse + 嵌套数据结构,轻松处理复杂事件
大数据·数据结构·数据库
alonewolf_991 小时前
深入理解MySQL事务与锁机制:从原理到实践
android·数据库·mysql
朝依飞1 小时前
fastapi+SQLModel + SQLAlchemy2.x+mysql
数据库·mysql·fastapi
3***g2051 小时前
redis连接服务
数据库·redis·bootstrap
m0_598177231 小时前
SQL 方法函数(1)
数据库
oMcLin2 小时前
如何在Oracle Linux 8.4上通过配置Oracle RAC集群,确保企业级数据库的高可用性与负载均衡?
linux·数据库·oracle
信创天地2 小时前
核心系统去 “O” 攻坚:信创数据库迁移的双轨运行与数据一致性保障方案
java·大数据·数据库·金融·架构·政务