Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Qt. Abrir una aplicación externa

Estas en el tema de Qt. Abrir una aplicación externa en el foro de C/C++ en Foros del Web. Hola: Adelanto la duda porque sé que no la voy a saber resolver, pese a que todavía no me he puesto. La cuestión: Estoy viendo ...
  #1 (permalink)  
Antiguo 20/07/2015, 05:38
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Qt. Abrir una aplicación externa

Hola:

Adelanto la duda porque sé que no la voy a saber resolver, pese a que todavía no me he puesto.

La cuestión:

Estoy viendo la clase QProcess para llamar a otra aplicación desde la mía.

En principio no hay problema, pero me pregunto si es posible que una vez abierta la aplicación externa no se vuelva a abrir, pero que sí cargue los datos que le suministro.


El tema es que quiero que una aplicación me cargue Vistas creadas en postgresql.
Entonces la primera vez habrá de abrir el programa, pero después, si ya está abierto, sólo quiero que me lea las Vistas creadas.

¡Saludos y gracias!
__________________
Mi calculadora en Qt
  #2 (permalink)  
Antiguo 20/07/2015, 06:31
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Qt. Abrir una aplicación externa

Usa QProcess con un puntero... si es null entonces tienes que crear el programa, en caso contrario no tienes que crearlo porque ya existe.
  #3 (permalink)  
Antiguo 20/07/2015, 10:14
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Qt. Abrir una aplicación externa

Gracias eferion, la verdad es que es lo más lógico y sencillo :)

Pero el caso es que en cuanto he hecho la primera prueba he visto que directamente no me deja abrir una segunda copia del programa una vez abierta.

Ahora el problema es cómo cargo las Vistas en el programa una vez abierto éste.....pero eso ya no corresponde a esta pregunta.

Saludos y gracias!
__________________
Mi calculadora en Qt
  #4 (permalink)  
Antiguo 20/07/2015, 10:26
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Qt. Abrir una aplicación externa

Cita:
Iniciado por dehm Ver Mensaje
Gracias eferion, la verdad es que es lo más lógico y sencillo :)

Pero el caso es que en cuanto he hecho la primera prueba he visto que directamente no me deja abrir una segunda copia del programa una vez abierta.

Ahora el problema es cómo cargo las Vistas en el programa una vez abierto éste.....pero eso ya no corresponde a esta pregunta.

Saludos y gracias!
Lo que no entiendo es que necesites un programa externo para leer de una base de datos... con Qt puedes usar la librería QSql para conectarte a la base de datos (necesitas el plugin de la bd que estés usando) o puedes usar directamente los drivers que te proporcione la web de la bd, que suelen tener una versión en C o en C++. Usar un programa externo te obliga a entablar conversaciones con dicho programa (usando memoria compartida o sockets) lo cual suele ser un mecanismo lento y complicado de manejar.

En este enlace te explican cómo compilar el driver de postgres, llamado QPSQL.

PD.: la versión de windows de postgres se compila usando el compilador de visual studio. Si usas la misma versión, compilar el driver es cuestión de hacer un par de llamadas con la consola de comandos. Si te da por usar mingw u otra alternativa los pasos se pueden complicar... pero es lo que tiene programar en C++ :)

Un saludo

Última edición por eferion; 20/07/2015 a las 10:32
  #5 (permalink)  
Antiguo 20/07/2015, 11:22
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Qt. Abrir una aplicación externa

Hola:

offtopiqueo....

La cosa es que estoy usando un programa SIG llamado QGIS

Estos programas pueden funcionar con varias fuentes de datos, y en mi caso he usado una BBDD POSTGIS, que es una postgres con extensión para manejar este tipo de datos espaciales.

Realmente, desde dentro de QGIS se puede hacer todo tipo de filtrado de datos, selecciones y demás, pero de una forma muy poco intuitiva. No está al alcance de un usuario normal, que ni sabe ni quiere saber de estas cosas.

La otra opción es programar en python un plugin para hacer estas mismas selecciones y demás de forma intuitiva, con unos diálogos y demás desde dentro de QGIS, pero.....tengo poca idea de python y todavía no me siento cómodo con él. En todo caso es la opción ideal.

Y la otra...me creo una utilidad en Qt con C++, mediante la cual puedo originar Vistas con todos los criterios de selección que necesito. Lo malo es que luego he de llamar a QGIS como un proceso externo para que cargue estas Vistas. Por ahora estoy en estas...

Y esa es la cosa
__________________
Mi calculadora en Qt
  #6 (permalink)  
Antiguo 20/07/2015, 11:31
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Qt. Abrir una aplicación externa

Por cierto, aprovecho para preguntarte si sabes de éste comportamiento....

Para ejecutar QGIS en la línea de comandos he de hacer así:
Código C:
Ver original
  1. qgis --project ruta/archivo

Así que hago lo siguiente:
Con:
Código C++:
Ver original
  1. QProcess *proceso;
  2. QStringList argumentos;
En el constructor ya defino el parámetro de la ruta:
Código C++:
Ver original
  1. argumentos.append("miruta/miarchivo.qgs");

Y por último hago la llamada:
Código C++:
Ver original
  1. proceso= new QProcess();
  2. proceso.start("qgis",argumentos);

Pero la ruta que me aparece es la de la ruta donde está mi ejecutable + la ruta de qgis:
Este es el error:

No se puede abrir /home/david/Programacion/Qt/SQL/Sql2/build-prueba2-Desktop_Qt_5_3_GCC_64bit-Debug/--project /home/david/pruebas/GIS/pruebas.qgs

que es la suma de:
/home/david/Programacion/Qt/SQL/Sql2/build-prueba2-Desktop_Qt_5_3_GCC_64bit-Debug
y
--project /home/david/pruebas/GIS/pruebas.qgs
__________________
Mi calculadora en Qt
  #7 (permalink)  
Antiguo 20/07/2015, 11:59
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Qt. Abrir una aplicación externa

Edito: Esta es la forma:

Forma1: Se define en la misma cadena tanto el programa como los argumentos:

Código C++:
Ver original
  1. QString programa = "qgis --project la/ruta/de/mi/proyecto/miproyecto.qgs";
  2. proceso->start(programa);

Forma 2. Si defino los argumentos aparte, la cadena --project es uno y la ruta sería otro.
Código C++:
Ver original
  1. QString programa = "qgis";
  2. QStringList argumentos;
  3. argumentos<<"--project";
  4. argumentos<<"la/ruta/de/mi/proyecto/miproyecto.qgs";
  5. proceso->start(programa,argumentos);
__________________
Mi calculadora en Qt

Última edición por dehm; 21/07/2015 a las 03:00
  #8 (permalink)  
Antiguo 21/07/2015, 03:07
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Qt. Abrir una aplicación externa

Pon el código real... con lo que tienes puesto es complicado hacerse una idea sobre el origen del problema
  #9 (permalink)  
Antiguo 21/07/2015, 03:37
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Qt. Abrir una aplicación externa

Hola eferion:

Sobre la última duda, la de cómo llamar correctamente a un programa con QProcess definiendo correctamente los argumentos, he editado el mensaje porque por fin ya lo tengo bien

Luego está lo del uso de QProcess en sí mismo.
Como te comentaba (la verdad es que releo la respuesta y está fatalmente contestada) el problema no es en el uso de la BBDD en sí. De hecho, ya me he diseñado mi primera Base de Datos medio compleja y una aplicación para usarla en plan "dummy"

La cosa es que esta Base de Datos tiene datos "normales" y datos espaciales. Cuando el usuario quiere ver los datos espaciales (son parcelas) puede hacer 3 cosas:

1.- Abrir la BBDD desde QGIS, y establecer él mismo los mecanismos del filtrado. Inviable a todas luces porque el usuario tendría que saber crear los filtros a mano, usar operadores y concatenaciones de los datos....totalmente descartado.

2.- Crear Vistas de Postgres desde mi aplicación y luego abrir a mano QGIS para leerlas. Eso implica abrir QGIS, irse al menú correspondiente, conectarse a la BBDD, seleccionar la Vista, seleccionar la columna que hará de Primary Key....y ver los datos....ya te digo que sigue siendo inviable para quien va a manejar esto, y en general sería bastante coñazo.

3.- Que desde la utilidad que he diseñado, y una vez filtrado el conjunto de datos que quiera y creada la Vista correspondiente, darle a un botón y que se abra QGIS y aparezca todo de forma automática. Como te comentaba, la forma "natural" es hacer esto desde un plugin dentro del propio QGIS, pero lo malo es que se programan en python.
No es lo ideal, pero es mejor que la opción 2

Saludos y gracias, como siempre
__________________
Mi calculadora en Qt

Etiquetas: externa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:30.