Seleccionar linea de treewidget desde una rejilla

Hola amigos, os cuento.

En un formulario tengo:
Un TreeWidget creado sobre una tabla en memoria que funciona perfectamente. Cargo primero un índice y según voy pulsando voy cargando el resto.
Una rejilla sobre una tabla en disco, que es igual a la de memoria del treewidget en cuanto a IDs y NAME

Necesito que cuando seleccione una línea de la rejilla, me expanda el treewiget hasta ese punto.
El problema me lo encuentro en que no soy capaz de definir la variable itempadre para expandir el árbol.
Cuando trabajo sobre el propio árbol, utilizo la función:
var itemPadre = menu.senderItem();

Pero claro, cuando selecciono desde la rejilla no existe ningún ítem seleccionado en árbol y me da error.

¿existe alguna forma de definir ese “itempadre” del árbol desde la rejilla y que automáticamente lo localice expandiéndoselas las ramas del árbol hasta él?

Gracias de antemano y saludos.

Hola albersanca.

Lo que tienes que hacer es añadir una columna al TreeWidget que contenga el ID de la Ficha correspondiente a la tabla en Disco.

Cuando se selecciona una Fila en la Rejilla guardas el ID en una variable local.
Solo tienes que recorrer el TreeWidget y comparar oItem.text(columnaID) con el ID.

Para seleccionae el Item ejecutas oArbol.scrollToItem(oItem, VTreeWidget.PositionAtCenter).

Si quieres expandir las ramas previas al Item seleccionado usa oItem.setExpanded(true).

Saludos
Paco Satué

Paco, buenas tardes.

Gracias por tu respuesta, que aunque la entiendo, no la sé aplicar a lo mío.

Debido a diversas casuísticas, el TreeWidget lo necesito ir cargando según pincho en cada elemento. La razón es, que al ser muchos conceptos y tener que recalcular las ramas mostradas según diversos factores que el cliente va seleccionando, si cargo todo el TreeWidget se ralentizaba una barbaridad, y desde soporte decidimos ir cargándolo rama a rama.
Lo que hacemos es cargar la primera rama al mostrar el formulario. Y a partir de ahí, según voy pinchando, se va cargando los plurales de la rama solicitada.

Cuando me dices que recorra en TreeWidget para obtener el ID, realmente el ID ya lo conozco, pues es el mismo que la tabla de la rejilla que pincho. Y por tanto conozco los ID de todos sus padres. Lo tengo configurado (AAABBBCCCDDDEEE…)

Para llegar a él, a mí se me había ocurrido ir cargando las ramas por su ID, dado que conocemos todos sus padres. Pero claro ese primero, no se expandirlo. No sé decirle que expanda la rama AAA y sucesivas hasta llegar al ítem buscado.

Si aplico la instrucción que me dices para nombrar el itemPadre como si lo hubiera pinchado, me da error. Ya te digo también, que de java ando muy corto, se manejarme viendo ejemplos , pero me pierdo al crear yo mismo. Por tanto, la estaré aplicando mal seguro,…

var itemPadre = menu.scrollToItem(theApp.globalVarToString( “marbella_web_dat/M_MEN_MAR_SEL_ID”), VTreeWidget.PositionAtCenter);

me da el siguiente error q adjunto

incompatible type of argument in calll to scrolltoitem(); candidates were scrolltoitem (vTreeItem*)
scrolltoitem (vTreeItem*, Qabstractitemview:: scrollHint) () at … marbella_web_dat/M_MEN_MAR_SEL_ID en proceso

Y aquí me atasco, no se me ocurre como hacerlo.
Quizás, ya me dirás, podría cargar toda la rama completa del buscado en el Tree, pero entiendo que me seguiría dando el error de arriba, algo hago mal.

Espero tu ayuda, gracias y saludos.

Hola albersanca.

Sin conocer a fondo el API de Velneo y un poco de javascript es complicado avanzar en ese tipo de tareas.

Voy a intentar preparar un ejemplo en los Ejercicios con Velneo en el que se vea la navegación y despliegue de ramas en un TreeWidget.

Saludos
Paco Satué

Hola albersanca.

He recordado este post.
Échale un vistazo, creo que tienes código para practicar.

Plan de Cuentas con Treeview - Velneo - Velneo

Saludos
Paco Satué

Paco, buenos días.
Eres un artista.
Viendo la programación, me han dado cuenta de que el error principal lo tenía en la definición del ID, que como muy bien dices, el ID se debe buscar de forma recursiva, y yo lo hacía a lo bestia con el ID directamente.
Lo he hecho siguiendo esos pasos y perfecto.

Gran aporte, gracias.