Spanish English Italian Magyar

Aplicando estilos en QML

QML provee muchos mecanismos para aplicar estilos a elementos de la UI. A continuación se describen tres de los enfoques mas comunes.

Enfoque 1: Componente personalizado

QML soporta la definición de nuestros propios “controles personalizados” :http://doc.qt.nokia.com/4.7/qml-extending-types.html#defining-new-components. A continuación crearemos un componente personalizado TitleText que podrá ser usado cada vez que un titulo sea requerido por nuestra UI. Si deseamos cambiar la apariencia de todos los títulos en la UI, solo deberemos editar TitleText.qml y los cambios se aplicaran en donde sea que haya sido utilizado.

  1. // TitleText.qml
  2. Text {
  3.     horizontalAlignment: Text.AlignHCenter
  4.     font.pixelSize: 50
  5.     color: "green"
  6. }
  7.  
  8. // in use
  9. TitleText {
  10.     text: "Title 1"
  11. }

Enfoque 2: Objecto Style

En este enfoque definiremos un objeto Style que contendrá una colección de propiedades definiendo el estilo. Este objeto es instanciado en el componente raíz, por lo que estará disponible en toda la aplicación.

  1. // Style.qml
  2. QtObject {
  3.     property int textSize: 20
  4.     property color textColor: "green"
  5. }
  6.  
  7. // root component
  8. Rectangle {
  9.     ...
  10.     Style { id: style }
  11.     ...
  12. }
  13.  
  14. // in use
  15. Text {
  16.     font.pixelSize: style.textSize
  17.     color: style.textColor
  18.     text: "Hello World"
  19. }

Enfoque 3: Híbrido (Objeto Style + Componente personalizado)

En este enfoque tenemos un objeto Style el cual es usado por nuestro componente personalizado.

  1. // Style.qml
  2. QtObject {
  3.     property int titleAlignment: Text.AlignHCenter
  4.     property int titleFontSize: 50
  5.     property color titleColor: "green"
  6. }
  7.  
  8. // root component
  9. Rectangle {
  10.     ...
  11.     Style { id: style }
  12.     ...
  13. }
  14.  
  15. // TitleText.qml
  16. Text {
  17.     horizontalAlignment: style.titleAlignment
  18.     font.pixelSize: style.titleFontSize
  19.     color: style.titleColor
  20. }
  21.  
  22. // in use
  23. TitleText {
  24.     text: "Title 1"
  25. }

Categories: