Implementando onPressAndHold

En otro artículo vimos cómo crear nuestra primera app para Android con Qt. En este veremos cómo agregar un menú de edición a nuestros campos de texto, una característica que no debe faltar para facilitar la interacción del usuario con el software que escribimos.

Como ya dije tomaremos como base el ejemplo llamado Test1, así que si no lo tienes lo puedes crear siguiendo las instrucciones del enlace que está al inicio.

  1. Abrimos el proyecto test1 con QtCreator.
  2. Encontramos y abrimos el archivo Page1Form.ui.qml que está dentro de Resources. Se abrirá en vista de diseño, para cambiar a la vista de código hacemos clic en Edit que se encuentra a la izquierda.
  3. Agregamos el código a partir de la línea 7 dentro del TextField que nos brindará las opciones básicas de Copiar, Cortar y Pegar. Finalmente nos quedará así:
4.	TextField {
5.	      id:textField1
6.	      placeholderText:qsTr("TextField")
7.	      selectByMouse:true
8.	      persistentSelection:true
9.	
10.	      Menu {
11.	           d:editMenu
12.	           width:80
13.	           x:textField1.x + 20
14.	           y:textField1.y + textField1.height
15.	
16.	           MenuItem {
17.	                    text:"CORTAR"
18.	                    font.pixelSize:12
19.	                    height:30
20.                       enabled:textField1.selectedText !== "" ? true : false
21.	                    onTriggered:{ textField1.cut() }
22.	           }
23.	
24.	           MenuItem {
25.	                    text:"COPIAR"
26.	                    font.pixelSize:12
27.	                    height:30
28.	                    enabled:textField1.selectedText !== "" ? true : false
29.	                    onTriggered:{ textField1.copy() }
30.	           }
31.	
32.	           MenuItem {
33.	                    text:"PEGAR"
34.	                    font.pixelSize:12
35.	                    height:30
36.	                    enabled:textField1.canPaste
37.	                    onTriggered:{ textField1.paste() }
38.	           }
39.	      }
40.	
41.	      onPressAndHold:{ editMenu.open() }
42.	}

A continuación, explicaré las partes más importantes del código que hemos añadido. En la línea 7 ponemos selectByMouse en true para poder seleccionar el texto dentro del control. En la línea 8 ponemos persistentSelection en true para que el TextField mantenga el texto seleccionado incluso después de perder el foco. Si desea comprender mejor, lo animo a cambiar el valor de estos campos y chequear el comportamiento de la app. A partir de la línea 10 declaramos el menú con las opciones de edición, el código es muy intuitivo, solo resaltar que en cada MenuItem el valor del campo enabled (habilitado o no, por ejemplo, línea 20) cambia dependiendo de, para copiar y cortar, si existe texto seleccionado y para pegar si existe texto en el portapapeles. Finalmente, en la línea 41 mostramos el menú al producirse el evento onPressAndHold. Para probar la nueva funcionalidad, compilamos y ejecutamos el proyecto y ponemos el dedo sobre el campo de texto y esperamos que se muestre el menú como se ve en la imagen:

Saludos!!!

Leave a Reply

Your email address will not be published. Required fields are marked *