Interacción entre formulario QML y formulario que lo lanza


([N2] overBCN) #1

Tengo un formulario principal que tiene un control Vista de datos don de lanzo un formulario QML que me muestra un calendario. Quiero que al pinchar en un dia del calendario me devuelva una lista de registro del form principal.
Lo he probado …

  1. Modificando una variable global desde QML. En el form principal tengo un campo que contiene la variable (se modifica correctamente), pero si hago una conexión de evento “valué changed”, no hace nada.
  2. Lanzando una acción desde QML: si es una acción que dispara una señal, no hace nada.

No consigo interactuar entre en form QML y el principal, para que me pueda lanzar un Manejador de evento.
Alguien sabe como se hace o si se puede hacer?
Gracias


([N4] sergioinfortic) #2

Hola.

No soy ningún experto en QML, pero es sencillo recoger la fecha seleccionada en una variable global y después desde velneo hacer con ella lo que quieras:

import QtQuick 2.4
import QtQuick.Controls 1.3

Item {
    id: marco
    width: 300; height: 400
    focus: true
	
	Calendar {
		id: calendario;		
		anchors.fill: parent;		
		weekNumbersVisible: false;
		selectedDate: theApp.globalVarToDate("TU_PROYECTO/VARIABLE_GLOBAL_FECHA")
		onClicked: {			
			theApp.setGlobalVar("TU_PROYECTO/VARIABLE_GLOBAL_FECHA",calendario.selectedDate);						
		}
	}
}

([N2] overBCN) #3

Gracias @sergioinfortic, esto ya lo he hecho, al seleccionar la fecha del calendario acuatizo la variable global, pero como hago para que me refresque una lista de registros que tengo justo debajo del calendario? No encuentro la forma de que me pueda disparar un Manejador de evento,
Se puede?


([N4] sergioinfortic) #4

mmmmm, Eso ya no lo he probado.

Se me ocurre la técnica de siempre:

Un manejador de evento carga la lista,
Un botón oculto BTN_REF (tamaño 0,0 no seleccionable con tab) que dispara el manejador.

Ahora hay que intentar que el QML ejecute el botón.

No lo he probado, pero debería ser algo como:

theRoot.dataView().control("BTN_REF ").click();

Como te digo no lo he probado, depende de cómo esté incrustado el formulario y el botón puede que tengas que acceder al parentDataView() de theRoot.dataView()

Esto ya es prueba y error.


([N2] overBCN) #5

Gracias @sergioinfortic, lo he probado, pero no hay forma de hacer que se dispare el proceso, no hace nada.
Un proceso que a priori parece tan sencillo, no se puede o no se sabe como hacerlo.
Alguien ha necesitado algo parecido?
Gracias de nuevo


([N4] sergioinfortic) #6

Hola.

Yo acabo de probarlo y me funciona:

theRoot.dataView().parentDataView().control(“BTN_REF”).click();

Si ves que no te va dilo y te lo meto en un vin


([N4] sergioinfortic) #7

pruebaQML.vin (1,7 KB)


([N2] overBCN) #8

Muchas gracias @sergioinfortic, funciona perfecto. Al copiar el txt no se rociaron bien las comillas. Saludos


([N4] sergioinfortic) #9

Ojo cuando copies código js desde el foro, tiene esa mala costumbre


([N2] overBCN) #10

@sergioinfortic, muchas gracias, me estaba volviendo loco.