QTableView 二次整理

简介: 一、设置可视化的组件 参考:   http://www.cnblogs.com/ribavnu/p/4810412.html   二、常用基本属性   http://www.cnblogs.com/ribavnu/p/4791393.

一、设置可视化的组件

参考:

  http://www.cnblogs.com/ribavnu/p/4810412.html

 

二、常用基本属性

  http://www.cnblogs.com/ribavnu/p/4791393.html

三、编辑后提示是否保存

  http://www.cnblogs.com/ribavnu/p/4702532.html

 

四、设置特定列是否能编辑

#
#   C_TableView
#  在QTreeView基础上增加限制 特定列是否 可以编辑
#
class C_TableView(QTableView): 
    def __init__(self, parent=None):
        QTableView.__init__(self, parent)
        # 设置可以编辑的   列
        # column:list
        self.c_allow_edit = list()
    #
    # 设置可以编辑的    列
    # allow_edit :list,
    # value : 可以编辑的多个列, 列编号从0开始
    def c_setAllowEdit(self, allow_edit):
        self.c_allow_edit = allow_edit
        
    def edit(self, index, trigger, event):
    
        args = [index, trigger, event]        
        columnIndex = index.column()
        
        if event is not None:
            # 2:鼠标的按下,3:鼠标的释放
            # 4:鼠标的双击
            # 如果  列  是否可以编辑
            event_type = event.type()
            if event_type ==4:
                if columnIndex not in self.c_allow_edit :
                    return False
                    
        return_value =super(QTableView, self) .edit( *args) 
        return return_value                                                   
           

 

五、设置特定列的代理,对 一 的 补充。

void QAbstractItemView::setItemDelegateForRow(int row, QAbstractItemDelegate *delegate)

 

# 自定义复选框checkbox
class Delegate_CheckBox(QtWidgets.QStyledItemDelegate):
    
    def createEditor(self, parent, option, index):
        
            editor = QtWidgets.QCheckBox('是', parent)
            # 填充背景
            #editor.setAutoFillBackground(True) 
            #editor.setGeometry(self.checkBoxRect(option))
            
            return editor
        
    # 计算 check_box的位置 和 大小 
    def checkBoxRect(self, option):
        
        but_style = QtWidgets.QStyleOptionButton()
        check_box_rect =QtWidgets. QApplication.style().subElementRect(
                    QtWidgets.QStyle.SE_CheckBoxIndicator,                    
                            but_style)

        check_box_point = QtCore.QPoint(option.rect.x() +
            option.rect.width() / 2 -
            check_box_rect.width() / 2,
            option.rect.y() +
                option.rect.height() / 2 -
                    check_box_rect.height() / 2);
        return QtCore.QRect(check_box_point, check_box_rect.size())

    
        
    def paint(self, painter, option, index):
           
                from PyQt5.QtWidgets import  QStyle
                
                # 如果选中则高亮
                if option.state & QStyle.State_Selected:
                        painter.fillRect(option.rect, option.palette.highlight())
           
                #获取值  
                checked = index.model().data(index, QtCore.Qt.DisplayRole)
                checked = int(checked)
                #按钮的风格选项  
                checkBoxOption =  QtWidgets.QStyleOptionButton()
                checkBoxOption.state |= QtWidgets.QStyle.State_Enabled;  
                #根据值判断是否选中  
                if checked > 0 :                   
                    checkBoxOption.state |= QtWidgets.QStyle.State_On                  
                else  :                  
                    checkBoxOption.state |= QtWidgets.QStyle.State_Off 
                 
                #返回QCheckBox几何形状  
                checkBoxOption.rect = self.checkBoxRect(option)
                #绘制QCheckBox  
                QtWidgets.QApplication.style().drawControl(QtWidgets.QStyle.CE_CheckBox,checkBoxOption,painter)  
                
    def setEditorData(self, spinBox, index):
        
            data = index.data()
            data = int(data)
            if data  > 0:
                spinBox.setChecked(True)
            else:
                spinBox.setChecked(False)
            
       
    def setModelData(self, spinBox, model, index): 
        
            data = spinBox.isChecked()
            if data:
                    model.setData(index, 1)
            else:
                    model.setData(index, 0)
       
        
    def updateEditorGeometry(self, editor, option, index):
        # 原始的就这么一句话
        #editor.setGeometry(option.rect)
        
        # 居中显示
        rect = option.rect
        option_x= rect.x()
        option_y = rect.y()
        option_width = rect.width()
     # 微调下左边,误差原因不明 rect.moveTo(option_x + option_width /2 - 8 , option_y) editor.setGeometry(rect)

 

 

 

 六、

设置tableview背景透明

                from PyQt5.QtGui import QPalette, QBrush, QColor
                palette  = tableView.palette()
                palette.setBrush(QPalette.Base,QBrush(QColor(255,255,255,0)))
                tableView.setPalette(palette)        

  

 

 

 

  

相关文章
|
Linux iOS开发 UED
探索Qt折线图之美:一次详尽的多角度解析
探索Qt折线图之美:一次详尽的多角度解析
3028 0
|
存储 网络协议 安全
使用 NetCat 工具实现远程文件传输
NetCat(NC)是一个通过 TCP/UDP 在网络中进行读写数据工具,主要用于调式领域,传输领域甚至黑客攻击领域。利用 NetCat 工具,可以将网络中的完整数据发送至另一台主机终端显示或存储,常见的应用为文件传输、与好友即时通信、传输流媒体等功能。
1041 0
使用 NetCat 工具实现远程文件传输
|
5月前
|
运维 BI API
企业Agent落地真相:多模型不是可选是必然
企业Agent落地关键不在“能否实现”,而在“能否稳定、可控、可持续”。真实业务链路天然需多模型协同:高阶推理、长文档处理、轻量任务各有所需。单模型易致成本高、弹性差、治理难。建议按任务分层选模,并构建统一接入与治理层,方能兼顾性能、成本与可运维性。
311 8
|
7月前
|
网络安全 数据安全/隐私保护
Socks5连接失败?多半是防火墙在“搞事”
Socks5代理常因防火墙拦截而连接失败——主因是其工作在会话层、依赖非标端口(如1080),易被端口封禁、协议识别或白名单限制。本文通俗解析三大限制,并提供更换端口、SOCKS5 over TLS加密、HTTP隧道封装及企业白名单适配等4种实用解决方案。
|
机器学习/深度学习 人工智能 算法
领航精准护肤:深度解析 PerfectCorp AI 肌肤分析 API 的技术矩阵与商业潜能
在2026年数字零售时代,护肤竞争已升级为数据能力的较量。 PerfectCorp 通过YCE开放的AI肌肤分析API,提供14维临床级皮肤指标解析,助力品牌实现超个性化服务。从技术集成到商业闭环,构建用户长期价值。
423 0
|
人工智能 JavaScript 前端开发
《鸿蒙Next ArkTS:开启人工智能应用开发高效新旅程》
在科技飞速发展的时代,人工智能与鸿蒙Next的结合成为开发者关注的焦点。ArkTS语言基于TypeScript,专为鸿蒙系统优化,支持静态类型检查和多种高级类型,能捕获潜在错误并充分利用鸿蒙底层能力。鸿蒙Next拥有微内核架构和分布式软总线技术,提供强大支持。开发环境搭建需安装Node.js、npm及DevEco Studio,并下载HarmonyOS SDK。通过引入HUAWEI HiAI等框架,开发者可实现多目标识别等功能。利用ArkTS的异步编程能力和声明式UI模型,可高效处理数据和用户交互。性能优化策略包括静态类型检查、WebAssembly加速及分布式任务分配。
484 11
|
关系型数据库 PostgreSQL Docker
|
前端开发 JavaScript Android开发
MUI框架开发APP详解,一篇就够了
1.MUI简介 最接近原生APP体验的高性能前端框架 追求性能体验,是开始启动MUI项目的首要目标,轻量必然是重要特征; MUI不依赖任何第三方JS库,压缩后的JS和CSS文件仅有100+K和60+K 鉴于之前的很多前端框架(特别是响应式布局的框架),UI控件看起来太像网页,没有原生感觉,因此追求原生UI感觉也是我们的重要目标 MUI以iOS平台UI为基础,补充部分Android平台特有的UI控件 MUI官方文档
1223 1
MUI框架开发APP详解,一篇就够了
|
前端开发 小程序 JavaScript
微信小程序 | 动手实现双十一红包雨
微信小程序 | 动手实现双十一红包雨
1336 0
微信小程序 | 动手实现双十一红包雨