使用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)
相关推荐
2301_776508722 分钟前
用Python生成艺术:分形与算法绘图
jvm·数据库·python
cxr82813 分钟前
PaperclipAI 组织关系与智能体协作指南
数据库·人工智能·架构·ai智能体·openclaw
@insist12336 分钟前
数据库系统工程师-Armstrong 公理系统:函数依赖推理与候选码求解核心方法论(重点)
数据库·软考·软件设计师·软件水平考试
Drone_xjw1 小时前
Qt 工具箱需求文档
c++·qt·需求文档
山峰哥1 小时前
查询优化案例:从慢查询到闪电般的查询速度
数据库·sql·性能优化·编辑器·深度优先
杨云龙UP1 小时前
Oracle ASM磁盘组空间分配与冗余理解
linux·运维·数据库·sql·oracle
山上三树2 小时前
Qt Widget介绍
开发语言·qt
微学AI2 小时前
一款数据库SQL防火墙:可以拦截99.99%,可以阻止恶意SQL
数据库·sql
2401_884563242 小时前
Python Lambda(匿名函数):简洁之道
jvm·数据库·python
haixingtianxinghai3 小时前
Redis真的是单线程吗?
数据库·redis·缓存