def data(self, index, role=Qt.DisplayRole): if not index.isValid(): return None attr_dict = self.header_list[index.column()] # 获取该列字段的配置 data_obj = index.internalPointer() attr = attr_dict.get('key') if role in SETTING_MAP.keys(): role_key = SETTING_MAP[role].get('config') # role 配置的关键字 formatter_from_config = attr_dict.get(role_key) # header中该role的配置 if not formatter_from_config and role not in [ Qt.DisplayRole, Qt.EditRole, Qt.ToolTipRole ]: # 如果header中没有配置该role,而且也不是 DisplayRole/EditRole,直接返回None return None else: value = apply_formatter(formatter_from_config, get_obj_value(data_obj, attr), data_obj) formatter_from_model = SETTING_MAP[role].get('formatter', None) # role 配置的转换函数 result = apply_formatter(formatter_from_model, value) return result if role == Qt.CheckStateRole and attr_dict.get('checkable', False): state = get_obj_value(data_obj, attr + '_checked') return Qt.Unchecked if state is None else state return None
def test_apply_formatter(formatter, result, args, kwargs): """Test for apply_formatter with all situation.""" assert utils.apply_formatter(formatter, *args, **kwargs) == result