Tengo alrededor de 40 botones que también son indicadores (Encendido o Apagado) y una vez por segundo actualizo el color de estos indicadores dependiendo del estado. Lo hago cambiando la hoja de estilos. ¿Se trata de matar demasiado para hacer esto y, de ser así, solo debo establecer una nueva hoja de estilo cuando el indicador ha cambiado de estado o debería usar algo como QBrush?El uso de styleSheets de forma dinámica agrega mucho cálculo
Respuesta
Sí. Descubrí que con Qt 4.6.2 en Linux, configurar una hoja de estilo para cambiar el color del texto en QLabel es muy lento.
La hoja de estilos dinámica parecía una gran solución, pero para mí, la necesaria setStyle()
era tan cara como setStyleSheet()
!
Después de mucha experimentación, he encontrado esta alternativa a tener por lo menos dos veces más rápido, y por lo general más de 50 veces más rápidas:
QPalette palette = lbl->palette();
palette.setColor(QPalette::WindowText, Qt::gray);
lbl->setPalette(palette);
Dependiendo de cómo su hoja de estilo (estática) está configurado, usted' d tiene que reemplazar QPalette::WindowText
con QPalette::Window
o QPalette::Button
. Vea el QPalette documentation para más detalles.
es un concepto genial. Desafortunado de que lo mencionen explícitamente es para "propósitos de demostración solamente" y "no debe usarse para producción" (aunque sí lo usé :) –
bump. sin faltarle el respeto a la respuesta anterior :) –
@yanbellavance, ¿tiene un enlace donde mencionan que es 'solo para fines de demostración' y 'no se debe usar en producción? –
No establezca dinámicamente hojas de estilo completas. En su lugar, defina una hoja de estilo de toda la aplicación usando una hoja de estilo dinámica que analiza una vez al inicio de la aplicación. Luego, en la hoja de estilo, definir las propiedades dinámicas de hojas de estilo que se detallan en el documentation:
Hay muchas situaciones en las que necesitamos para presentar un formulario que tiene campos obligatorios. Para indicar al usuario que el campo es obligatorio, una solución efectiva (aunque estéticamente dudosa) es utilizar amarillo como color de fondo para esos campos. Resulta que esto es muy fácil de implementar usando Qt Style Sheets. En primer lugar, nos gustaría usar el siguiente sea aplicable en toda la hoja de estilo:
*[mandatoryField="true"] { background-color: yellow }
En su caso, probablemente podría hacer algo como esto:
QPushButton[state="on"] {
background-color: green;
}
QPushButton[state="off"] {
background-color: red;
}
A continuación, actualice la propiedad botón de 'estado':
pushButton->setProperty("state", "on");
pushButton->setStyle(QApplication::style());
Desafortunadamente, para Qt 4.6 tendrá que forzar un recálculo de la hoja de estilo restableciendo el estilo del accesorio, de ahí el setStyle()
llamada.
El uso de hojas de estilo dinámicas de esta manera es muy rápido. Estoy trabajando en una aplicación que hace un uso intensivo de las propiedades dinámicas de la hoja de estilos y no ha notado ninguna degradación del rendimiento.
Gracias por la gran respuesta. Entonces desde Qt 4.6 tendré que llamar a pushButton-> setStyle (QApplication :: style()); cada vez que cambio las propiedades para afectar el estilo? Lo pondré en mi código ahora mismo para evitar problemas futuros. –
¿estás absolutamente seguro de que este será el caso en Qt 4.6? –
No he logrado que el comportamiento dinámico funcione sin restablecer el estilo. También vea esta pregunta: http: // stackoverflow.com/questions/1595476/are-qts-stylesheets-really-handling-dynamic-properties/1849127 # 1849127 ¿Logró obtener el comportamiento dinámico sin restablecer el estilo del widget? Estoy usando Qt en Linux, no estoy seguro de si eso hace alguna diferencia. –
En mi experiencia, las hojas de estilo consumen demasiados recursos, es mejor evitarlos si puede.
¿Qué es demasiado? –
la frecuencia de actualización fue una vez por segundo y la PC cuádruple en la que se ejecuta mi aplicación fue tan sencilla que se ejecutó al 0% :) –
- 1. Uso de variables en qt StyleSheets
- 2. Captura de CPU y uso de memoria de forma dinámica
- 3. wkhtmltopdf stylesheets
- 4. Cálculo del uso de CPU
- 5. Agregar StyleSheets programáticamente en Asp.Net
- 6. Modificar el indicador de pestaña de forma dinámica en Android
- 7. cálculo de uso de la CPU del comando superior
- 8. ¿Podemos especificar el grado de paralelismo de forma dinámica?
- 9. ¿Cómo puedo evaluar el código de C# de forma dinámica?
- 10. Excepciones extrañas compiladas de forma dinámica expresión
- 11. Uso de Compass en Heroku:/tmp para hojas de estilo de forma remota y local
- 12. Cómo crear un predicado de forma dinámica
- 13. ¿Es imposible usar Generics de forma dinámica?
- 14. Forma gratuita Región web.config dinámica
- 15. Cómo combinar objetos Java de forma dinámica
- 16. ¿Cómo llamar a TryParse de forma dinámica?
- 17. ¿Cómo ad ews stylesheets a JSDOM
- 18. Agregue fragmentos de forma dinámica en el fragmento
- 19. Obtener el marco del teclado de forma dinámica
- 20. ¿Cómo establecer el margen de forma dinámica en Android?
- 21. PrimeFaces CommandButton: activar de forma dinámica/desactivar el icono CommandButton
- 22. Cambie el tamaño del panel de forma dinámica
- 23. c matrices: ¿tamaño de configuración de forma dinámica?
- 24. Uso de filtro cruzado para devolver resultados de forma dinámica en JavaScript
- 25. ¿Cómo agregar un div de forma dinámica usando Dojo?
- 26. Cómo analizo @import stylesheets con Javascript
- 27. Html.ActionLink no puede ser enviado de forma dinámica
- 28. ¿Puedo cambiar la propiedad UIReturnKeyType of UITextField de forma dinámica?
- 29. tabla dinámica a una hoja de cálculo Google, a través de la API
- 30. Abrir hoja de cálculo xml en Excel de forma predeterminada
¿No respondería a su pregunta si utilizó el monitor de rendimiento de O/S ('perfmon.exe' en Windows) para medir la cantidad de cómputo de la CPU? – ChrisW