Boston QML que lance un Manejador de Evento


([N2] overBCN) #1

Hola,
Quisiera lanzar un “Manejador de Evento” desde un botón que quiero lanzar desde una Lista QML. Ahora me lanza el formulario de edición del registro

TextButton {
				y: 10
				width: 65
				height: 30
				radius: 0
				anchors { right: background.right; rightMargin: 10 }
				opacity: recipe.detailsOpacity
				border.color: "#3795c7"
				color: "#2b579a"  //color del texto - NO HACE NADA
				text: "<br> Editar <br>"

				onClicked:
				{
					listView.currentIndex = index
					listView.itemActivated(index) 
				}

			}

También quisiera saber como le puedo poner un color de fondo al botón, al texto y dale un tamaño al texto. No lo consigo.
La verdad es que no tengo mucha idea de QML
Gracias


([N1] desarrollo) #2

Hola!

El código que pego es de una ‘Lista QML’
En esa lista, se activa la señal al cambiar el elemento seleccionado y eso puede disparar el evento desde el formulario donde está la lista en cuestión.
El texto que se muestra en cada celda es lo que hay como ‘display’, que es el campo que pasas como ‘Contenido’ a la lista.
Los colores pueden ser campos fórmula de la tabla en función de su estado. Los pasas a la lista como UserRoles.
El resultado es un casillero autoajustado al número de filas y columnas que le pases con las dimensiones de pantalla completa.

Saludos,

César

// ------------------------------ Casillero ------------------------------

import QtQuick 1.0

Rectangle
{
id: mainRect
anchors.fill: parent; color: “#ffffff”;

property int anchoventana: theMainWindow.width() 
property int columnas: theApp.globalVarToInt ("Datos/COLUMNAS")
property int ancho: ((anchoventana / columnas) - 1)

	
property int altoventana: theMainWindow.height()
property int filas:	theApp.globalVarToInt ("Datos/FILAS")
property int alto: ((altoventana - 50) / filas) - 1
	
x: ((anchoventana - (columnas * ancho)) / 2); y:0;


GridView 
{
	id: theListView
	objectName: "theListView"
	x: 0; y: 0; width: (ancho*columnas) + 2*x; height: 50 + (alto*filas); 

	signal selectionChanged(int index)
	signal itemActivated(int index)

	cellWidth: ancho; cellHeight: alto;

// anchors.fill: parent;
focus: true

	model: theListModel
	delegate: 	
		Column 
		{
			width: theListView.cellWidth; height: theListView.cellHeight;

		Rectangle {
			id: root
			width: ancho - 1; height: alto -1
			color: userrole1

			Text {
				id: texto
				text: display
				anchors.centerIn: parent; anchors.verticalCenterOffset: -1
				font.pixelSize: parent.width &gt; parent.height ? parent.height * .35 : parent.width * .35
				style: Text.Sunken; color: userrole2; styleColor: userrole3; smooth: true
			}
		}

			MouseArea 
			{
				anchors.fill: parent
				acceptedButtons: Qt.LeftButton | Qt.RightButton
				onClicked: 
				{ 
					theListView.currentIndex = index 
				}
				onDoubleClicked: { theListView.itemActivated(index) }
			}
		}
	onCurrentIndexChanged: 
	{
		theListView.selectionChanged(theListView.currentIndex);
	}
}

}


([N2] overBCN) #3

Gracias, pero lo que quiero es poder lanzar un “Manejador de Evento” desde un botón. El manejado de Evento se encuentra en la misma “Lista QML” del control
Gracias


([N4] Jorge) #4

Para tener control en QML sobre los eventos velneo necesitas intermediar mediante un formulario Velneo.
Creas el formulario velneo
Defines el evento
Creas un botón oculto que lanza el evento
Dentro del formulario velneo muestras el Formulario o Lista QML
Desde QML manejas el botón mediante la API de V7 y lo pulsas

Recuerda que la API de velneo es limitada desde QML.

Estas técnicas avanzadas se explican en el curso de QML de AyudaVelneo (también se explican otras técnicas para resolver los problemas habituales).


([N2] overBCN) #5

Muchas gracias Jorge.
Había hecho el mismo planteamiento, pero lo que no sé, es hacer la llamada desde “onClicked” desde QML
Saludos


([N3] pacosatu) #6

Hola Luis.

Para manejar desde QML el Botón oculto que propone Jorge debes usar el API al igual que lo harías desde vJavascript:


var oForm = theRoot.dataView().parentDataView()
var oBoton = oForm.control("CMD_EVENTO_QML")
oBoton.click()

Yo otras veces también uso un Timer para disparar el manejador de evento concreto. Con esto no necesitas tener un formulario padre que contenga el formulario QML.

Un ejemplo:


******* CÓDIGO QML ******
.....
MouseArea {
   width: fondo.width
   height: fondo.height
   anchors.bottom: parent.bottom
   onClicked: {
      // no funciona el comando alert de JS en QML, lo delegamos en Velneo
      verAlerta()
   }
}
.....
function verAlerta() {
   theRoot.setVar("NACCION", 2)
   theRoot.dataView().startTimer(50)
   // También podemos usar un Botón (oculto) para lanzar el Manejador
   // var oForm = theRoot.dataView().parentDataView()
   // var oBoton = oForm.control("CMD_EVENTO_QML")
   // oBoton.click()
}
***************************

******* CÓDIGO Velneo del Manejador del evento TIMER disparado desde QML ******
var oForm = theRoot.dataView();
// Paramos el Timer 
oForm.stopTimer()
// La variable local NACCION determina qué queremos hacer
var nAccion = theRoot.varToInt("NACCION")
theRoot.setVar("NACCION",0)
switch (nAccion) {
   case 1:
      ........
      break 
   case 2:
      alert("Alerta desde el <b>formulario QML</b>","QML Alert")
      break
}

Jorge, dices que son técnicas avanzadas. ¡Hombre! son chapucillas que tenemos que ir descubriendo después de muchos prueba y error. Y error me refiero a múltiples cierres bruscos de vClient sin que tengamos una mínima herramienta de depuración. Es cierto que el acople API/QML tiene muchas grietas que habrá que ir registrando para evitarlas.

Saludos
Paco Satué


([N4] Jorge) #7

QML está cojo… cojo… digamos que estas ñapas son como las muletas hasta que nos quiten la escayola.

Ya sabes que no me suelo cortar demasiado a la hora de comentar los problemas que tiene Velneo http://tipesoft.com/mas-soft-menos-hard/. Dicho esto… con QML1 (mediante estas y otras muletas) se pueden hacer interfaces muy buenos.

Con la 2.x se podrán hacer aplicaciones de gran alcance (aunque nunca seran life is soft). La unica cuestion que velneo tiene que resolver es la falta de integracion de la API Velneo con QML2… si lo logran tendran un gran producto en la vertiente mobile. Si dan soporte a arm para el vclient tendra tambien grandes opciones en software empotrado.


([N2] overBCN) #8

Gracias Paco. Hago pruebas