pyside2 - qt for python
Los valores de acceso de dropActions en el modelo(PySide/PyQt/Qt) (1)
En un QTableModel cuando ingreso lo siguiente:
print model.supportedDropActions()
Acabo de obtener:
<PyQt4.QtCore.DropActions object at 0x00000000081172E8>
¿Cómo puedo acceder a una lista real de las acciones de caída admitidas desde este objeto? En la documentación , dice: "El tipo DropActions es un typedef para QFlags. Almacena una combinación OR de valores DropAction".
Tenga en cuenta que estoy haciendo esto en Python (PySide).
Artículos Relacionados:
Fondo
Primero, asegúrese de comprender cómo funciona la codificación bit a bit para estos indicadores. Aquí hay descripciones realmente buenas en las respuestas aceptadas:
- ¿Qué son los operadores bit a bit?
- ¿Cómo encontrar una ocurrencia específica de Qt.ItemFlag en la instancia personalizada de Qt.ItemFlags en PyQt?
Todos los que usan Qt y sus parientes deberían leerlos, ahorrarán muchos dolores de cabeza si alguna vez quisieran extraer información de los valores codificados en bits.
Solución
Si bien lo siguiente no es para acciones de abandono, sino para roles de datos de ítems, los principios son exactamente los mismos. Como se mencionó en los comentarios en la publicación original, puede volver a codificar el valor codificado como int
y luego decodificarlo en un formato legible por humanos utilizando la enumeración (es decir, la traducción entre entero y función) proporcionada por Qt en línea. No sé por qué a veces los documentos representan los números enteros como hexadecimales contra decimales.
En lo que sigue, representé la enumeración que encontré en línea en un diccionario con la clave int
como, y la descripción de cadena legible por humanos como valor. Luego use una función que arroje el rol de int
para hacer la traducción, utilizando ese diccionario.
#Create a dictionary of all data roles
dataRoles = {0: ''DisplayRole'', 1: ''DecorationRole'', 2: ''EditRole'', 3: ''ToolTipRole'',/
4: ''StatusTipRole'', 5: ''WhatsThisRole'', 6: ''FontRole'', 7: ''TextAlignmentRole'',/
8: ''BackgroundRole'', 9: ''ForegroundRole'', 10: ''CheckStateRole'', 13: ''SizeHintRole'',/
14: ''InitialSortOrderRole'', 32: ''UserRole''}
#Return role in a human-readable format
def roleToString(flagDict, role):
recastRole = int(role) #recast role as int
roleDescription = flagDict[recastRole]
return roleDescription
Luego, para usarlo, por ejemplo, en un modelo donde los roles se están lanzando y quiero ver lo que está haciendo:
print "Current data role: ", roleToString(dataRoles, role)
Hay diferentes maneras de hacerlo, pero me parece muy intuitivo y fácil de usar.