VNC Viewer en Velneo

VNC es una de las soluciones Open Source de escritorio remoto m√°s usadas por todos.

https://es.wikipedia.org/wiki/VNC

VNC son las siglas en inglés de Virtual Network Computing (Computación Virtual en Red).

VNC es un programa de software libre basado en una estructura cliente-servidor que permite observar las acciones del ordenador servidor remotamente a través de un ordenador cliente. VNC no impone restricciones en el sistema operativo del ordenador servidor con respecto al del cliente: es posible compartir la pantalla de una máquina con cualquier sistema operativo que admita VNC conectándose desde otro ordenador o dispositivo que disponga de un cliente VNC portado.

La versión original del VNC se desarrolló en el Reino Unido, concretamente en los laboratorios AT&T Olivetti Research Laboratory, en Cambridge. El programa era de código abierto, por lo que cualquiera podía modificarlo, y existen hoy en día varios programas para el mismo uso. Muchos derivados modernos de él son software libre con licencia GPL.

…

Simple de instalar, de configurar y de usar, nos permite conectar remotamente a un ordenador que tenga instalado VNC Server (el servidor VNC que soporte este protocolo).

Partiendo del código fuente del plugin QmlVncViewer  https://github.com/heroyin/qmlvncviewer con licencia https://github.com/heroyin/qmlvncviewer/blob/master/LICENSE hemos compilado para Win32 obteniendo un plugin sencillo y funcional. No hemos necesitado realizar ninguna modificación en el mismo.

image

Este plugin usa las librerías de http://www.tightvnc.com/ con licencia GNU GPL v2 https://www.gnu.org/licenses/old-licenses/gpl-2.0.html. Esta licencia nos obliga a liberar todo el código fuente de las aplicaciones donde se integre con la misma licencia (o licencia abierta equivalente).

En caso de querer usarlas para uso comercial tienes una segunda opción, la licencia comercial. La puedes solicitar en https://www.tightvnc.com/licensing.php. Esta licencia os permitiría incluirla en productos comerciales.

 

Compilar QmlVncViewer para Velneo

La compilación no es especialmente compleja, aunque lo cierto es que no hay nada de documentación al respecto.

Primero tienes que compilar la solución tightvnc.sln, para Win32 en modo Release desde Visual Studio 2013. Es importante que marques todos los proyectos para que se compilen en modo Multi-threaded DLL (/MD)

image

Despu√©s abre desde QtCreator el fichero vncroot.pro y procede a la compilaci√≥n en modo Release. Recuerda que el entorno requerido es el que os explicamos en el art√≠culo https://tipesoft.com/compilar-plugins-qml-para-velneo/. Poco m√°s que a√Īadir.

image

Ejemplo del Plugin QML VncViewer

A partir de ahora podr√°s disfrutar de ella en Velneo gracias a este nuevo plugin que os presentamos hoy.

image

Como veis, podemos conectarnos sin ning√ļn problema desde Velneo a nuestros servidores VNC gracias a este nuevo plugin.

image

Desde el punto de vista de la implementación QML, poco que decir. Disponemos de un Elemento QML llamado VncViewer donde establecemos el host, port y password. Por otro lado, usamos la función adjustView() para ajustar el scrollView que nos permite acceder a todo el escritorio de la máquina a la que estamos conectados.

image

Para iniciar el visor, usamos vncViewer.start(). Para cerrar la visualización usamos vncViewer.stop() y para refrescar la misma vncViewer.refresh(). Es importante la parada de la visualización ya que es un raw abierto en un socket.

Para nuestras pruebas, hemos usado en el lado del servidor UltraVNC Sever (http://www.uvnc.com/). Hemos obtenido buenos resultados, sin ning√ļn problema importante.

image

Respecto a a la configuraci√≥n del servidor, es importante fijar el puerto, abrir el firewall y establecer las dos contrase√Īas requeridas. El resto de los par√°metros los podemos dejar por defecto.

Por otro lado, recordaros que VNC no es que sea especialmente seguro, por lo que se recomienda mantener actualizadas las versiones de nuestros servidores VNC. Por otro lado fija contrase√Īas fuertes y mantenlas actualizadas.

 

Descargas

Como podéis apreciar, es un plugin fenomenal. Os dejamos disponible todo lo necesario para que podáis disfrutar de el en Velneo 7.22.1.

Descargar código fuente del plugin QML

Recuerda que esta librer√≠a tendr√°s que compilarla para la versi√≥n adecuada de tu vClient. Para facilitarte el trabajo, hemos empaquetado la versi√≥n para Windows x32 en un descargable. Solo tienes que copiar el contenido dentro de la carpeta Velneo (donde est√° ubicado el ejecutable del vClient.exe). Aseg√ļrate de que el plugin queda dentro de la carpeta qml del directorio de instalaci√≥n de Velneo. Recuerda respetar la licencia abierta del mismo, esta librer√≠a tiene restricciones importantes de uso, no te las saltes.

Descargar Plugin QML para Velneo v7.22.1Descarga libre

Esta vez no os damos acceso al VIN con el ejemplo por cuestiones de licencia, pero no os preocup√©is… es tan simple como crear un proyecto Velneo que contenga un fichero QML¬†con el ejemplo incluido en el c√≥digo fuente anteriormente enlazado. Si ten√©is dudas… no tard√©is en comentar para aclararlas. Pod√©is fijaros en los anteriores.

Ante todo, no se te olvide respetar las licencias de todos ellos.

 

 

Qué es un Plugin QML

Nuestro buen amigo Paco Satu√© nos deja caer en uno de nuestros √ļltimos art√≠culos que ser√≠a interesante aclarar para toda la comunidad Velneo una serie de cuestiones:

Paco Satué

marzo 8, 2018 | Responder

Hola Jorge.

Las preguntas serían:

‚Äď ¬Ņ qu√© es realmente un plugin QML ?
‚Äď ¬Ņ necesito unos conocimientos medios de C++ ?
‚Äď ¬Ņ existen en Internet desarrollos en Qt que sean f√°cilmente importables a Velneo como plugins ?
‚Äď ¬Ņ √©sta ser√≠a una buena forma de extender Velneo y en ese caso, por qu√© no se hace m√°s a menudo ?

Saludos y gracias por los artículos de excelente nivel.
Paco Satué

Paco tiene razón… y vamos a dársela atendiendo a esta cuestiones y otras que puedan ser necesarias para clarificar que es eso de un plugin QML y como nos afecta a los desarrolladores Velneo.

 

Qué es un plugin QML

Un plugin QML es una posibilidad de extensibilidad que tiene QML y por ende Velneo. Nos permite extender su funcionalidad de una forma modular (los módulos son los plugins).

Estos plugins pueden contener código C/C++, código javascript y código QML. Se pueden desarrollar combinando las tres tecnologías, haciendo que sea realmente interesante.

Lo habitual es que sea un componente C/C++ con peque√Īas partes en QML y javascript.

En caso de requerir solo de capacidades QML y javascript no es necesario desarrollar un plugin c++, con integrarlo como un componente dentro de nuestro desarrollo QML sería suficiente.

Si nos fijamos uno de ellos, veremos que la dispone de funcionalidades desarrolladas de forma mixta (C/C++, código javascript y código QML).

Fíjate en el siguiente directorio de tu instalación de Velneo.

image

Como puedes observar, el plugin QML QtMultimedia, está formado por una dll (resultado de compilar código c/c++), un fichero QML (Video.qml) y un fichero de configuración (qmldir).

Si abrimos el fichero Video.qml con un editor de texto podemos observar como dentro del mismo hay fragmentos de código JavaScript.

image

Observar esta cuestión nos permite vislumbrar en que consiste un plugin QML (técnicamente hablando).

Plugins QML en Qt

Dentro de Qt 5 existen multitud de plugins QML. Parte de ellos integrados dentro de la plataforma base, otros como extensiones dentro del proyecto Qt y otros de terceros (de código abierto o cerrado).

En caso de ser plugins QML/C++ requerimos compilarlos para cada plataforma. Esto provoca que sea más complejo técnicamente de lo deseado.

 

Plugins QML en Velneo

Usarlos dentro de Velneo consiste en poco más que pegarlos en la ubicación correcta (si ya los tienes compilados) e importarlos dentro de tus formularios o listas QML de Velneo.

Actualmente podemos extender el vClient y el vDevelop mediante plugins QML.

En el mundo Velneo, no hay ning√ļn soporte para esta capacidad de extender nuestras herramientas, pero lo cierto es que tampoco es que nos haga demasiada falta.

 

Necesito saber C++ para desarrollar plugins QML

Sin dudas.

Por desgracia, necesitas algo m√°s que el conocimiento b√°sico:

  • Por un lado, necesitas conocer C y C++ (nivel medio).
  • Por otro, necesitas conocer QML y JavaScript (no es demasiado complejo, pero requiere de cierto esfuerzo). Recuerda que ya hemos escrito alg√ļn art√≠culo sobre como compilar
  • Por otro, la forma de declarar un plugin (no es demasiado compleja). Tenemos escrito otro¬† art√≠culo sobre como crear tus plugins, no dudes en leerlo.
  • Por otro, necesitas conocer la plataforma Qt en cada sistema operativo, no es lo mismo compilar en windows, linux o iOS (la verdad es que no es tan simple como puede parecer).
  • Tambi√©n necesitas conocer herramientas tales como compiladores, enlazadores, JDK, SDK, XCode, CMake, QMake, Git‚Ķ

Vamos… que no está al alcance de todo el mundo.

 

Proyectos Qt que se puedan incorporar como plugins Velneo

Proyectos Qt hay muchos. Que se puedan integrar de forma directa en Velneo, pocos.

 

Plugins que requieren poco esfuerzo

En los proyectos Qt/QML que hay, el soporte de la comunidad de desarrollo Qt es medio/bajo. Podríamos empezar por esta lista de recursos disponibles Qt/QML:

https://github.com/mikalv/awesome-qt-qml

En algunos de ellos, solo hay que coger la instrucciones del proyecto, compilarlos para cada plataforma y volcar los binarios adecuadamente. En otros… no es tan simple.

 

Plugins que requieren de esfuerzo medio-alto

Por otro lado, tambi√©n hay proyectos, que haciendo un esfuerzo medio/alto se podr√≠an convertir en plugins QML. Tendr√≠amos que ver si funcionalmente son necesarios, estudiar el c√≥digo fuente, desarrollar las clases que intermedien y por √ļltimo crear y compilar los plugins. De estos hay muchos m√°s.

https://github.com/JesseTG/awesome-qt

https://github.com/skhaz/awesome-qt

https://github.com/fffaraz/awesome-qt

https://github.com/insideqt/awesome-qt

 

Plugins que requieren de esfuerzo alto

Y ya puestos… si cogemos C y C++ las posibilidades son infinitas, pero el esfuerzo es mucho mayor.

https://github.com/fffaraz/awesome-cpp

 

Es una buena forma de extender Velneo

La verdad es que los plugins QML son una poderosa forma de extender Velneo, tal vez la más poderosa. Pero también es cierto, que los esfuerzos necesarios son medio/altos, y eso echa para atrás a muchos desarrolladores de la comunidad Velneo.

Este es el motivo por el que hemos decidido caminar en esta dirección, para ayudaros a abrir camino en esta difícil tarea. Los resultados saltan a la vista:

Por nuestra parte seguiremos dando luz sobre esta forma de extensi√≥n de Qt‚Ķ ¬ŅCu√°l ser√° el siguiente?

QtRecorder en Velneo

Me he tomado un descanso en los √ļltimos d√≠as, los anteriores art√≠culos fueron realmente intensos y necesitaba un relax. El trabajo que supone hacer todo el proceso para a√Īadir un nuevo plugin QML es intenso, y lo cierto es que las dos √ļltimas semanas no hemos parado.

Por eso he elegido esta vez, un plugin light. Por lo menos esa era la teoría.

He partido de QML Recorder (https://github.com/sverzegnassi/qml-recorder).

Este plugin QML, esencialmente nos permite grabar audio desde QML en distintos formatos y fuentes.

 image

Como ha priori parecía muy simple, compilé el plugin e importé los ejemplos a Velneo. El resultado… no funcionaba.

Revisando código, encontré un par de cosas que podían ser las culpables (tratamiento de las rutas y otro detalle menor). Corregidas, compiladas y a funcionar.

Parecía que ya estaba yo contento… hasta que me dio por leer. Terminé leyendo https://github.com/sverzegnassi/qml-recorder/issues y me día cuenta de que era una versión anticuada (no mucho la verdad). Navegando… encontré unas fuentes más actualizadas. Tal vez era más correcto partir de ellas y olvidarnos de las antiguas https://bazaar.launchpad.net/~verzegnassi-stefano/+junk/recorder-test/files.

Al analizar el código fuente, voy y me encuentro dos problemas .

Primer problema

El código fuente está dividido en dos plugins QML.

image

Vuelta a empezar‚Ķ no por favor. No quer√≠a hacer nada complicado, tengo que leer mucho m√°s sobre de Angular 5 y TypeScript, tengo que revisar el dise√Īo de Arquitectura de otro mega-proyecto, tengo que ofertar un montaje de un CAS, tengo que evitar los rebotes del 4066.

No tengo tiempo para estas cosas…. pufff… dos plugins en vez de uno… pufff…

Pero no siempre, lo pude evitar. No quiero que mis compis Velneadores tengan que andar con dos librerías para algo tan sencillo como grabar un audio (conceptualmente están mejor separadas, pero para facilitar el uso, considero que mejor juntas).

El resumen… que he creado un plugin QML que contiene los dos y que hace el trabajo correctamente.

Segundo problema

El ejemplo está desarrollado para Ubuntu…. esto no me lo esperaba.

image

A revisar el ejemplo y retocar las cosas que no son compatibles. Y todo esto para un simple botón que graba audio.

image

Moralejas

‚ÄúNo es oro todo lo que reluce‚ÄĚ, ‚ÄúNo hay mal que por bien no venga‚ÄĚ, ‚ÄúLo barato sale caro‚ÄĚ, ‚ÄúEl que corre pronto para‚Ä̂Ķ aplicaros el que m√°s os guste. A mi me da, que aplican todos y alguno m√°s en este caso.

QML es dado a la fragmentación por culpa de los fabricantes (como siempre):

  • BB10
  • Ubuntu
  • V-Play
  • Jolla
  • Nemo
  • Qt5
  • ‚Ķ

Muchas formas de hacer lo mismo, un sinsentido para un framework tan genial como Qt.

Descargas

Bueno, es hora de publicarlo. Funcionalmente es una librería simple, pero que resuelve una cuestión interesante. Os dejamos disponible todo lo necesario para que podáis disfrutar de ella en Velneo 7.22.1.

Descargar código fuente del plugin QML de QRecorder para v7.22.1Descargar código fuente

Recuerda que esta librer√≠a tendr√°s que compilarla para la versi√≥n adecuada de tu vClient. Para facilitarte el trabajo, hemos empaquetado la versi√≥n para Windows x32 en un descargable. Solo tienes que copiar el contenido dentro de la carpeta Velneo (donde est√° ubicado el ejecutable del vClient.exe). Aseg√ļrate de que el plugin queda dentro de la carpeta qml del directorio de instalaci√≥n de Velneo.

Descargar Plugin QML para Velneo v7.22.1Requiere estar registrado

También os damos acceso al VIN de todos los ejemplos funcinando en Velneo V7

Descargar VIN con los ejemplos de QtRecorder para Velneo v7.22.1Requiere estar registrado

La verdad es que no se cual es el uso que la vais a dar, ya me contareis. Recuerda respetar la licencia GNU del mismo.

A√ļn hay m√°s

Si crees que ya has superado todos los problemas es que a√ļn te queda alguno que superar.

Pues eso, que voy a publicar en WordPress y zasca. Ha dicho que hoy no, tal vez ma√Īana.

image

Un abrazo… y espero que tengáis un camino más sencillo con las pruebas de este plugin.

QZXing en Velneo

Esta vez nos enfocamos en una buena librería de uso empresarial. Sin duda aportará gran valor en la comunidad Velneo.

QZXing es una librer√≠a intermediaria entre ZXing y Qt. ZXing, abreviatura de (“Zebra Crossing”), es una librer√≠a de procesamiento de im√°genes que permite leer y generar c√≥digos de barras 1D y 2D. Es especialmente buena en el proceso de decodificaci√≥n, no tanto en la codificaci√≥n. ZXing dispone de soporte para c++, Java y Android https://github.com/zxing/zxing.

Su licencia es Apache 2.0. https://github.com/zxing/zxing/blob/master/LICENSE

image

Significa que es permisiva, pero tiene que mantener las marcas de uso. También recordaros que QR code está licenciado por Denso Wave, inc.

Por otro lado, QZXing es la librería intermediara entre Qt y ZXing, convirtiéndose en la librería más importante en codificación/decodificación de códigos de barras en Qt https://github.com/ftylitak/qzxing. Su licencia también es Apache 2.0 https://github.com/ftylitak/qzxing/blob/master/LICENSE.

QZXing, en teoría, dispone de soporte para QML (https://github.com/ftylitak/qzxing), pero lo cierto es que hemos tenido que desarrollar un plugin para que funcione correctamente en Velneo. El código fuente del plugin lo podrás encontrar al final del artículo, dentro del fichero comprimido del código fuente, en la carpeta QZXing-master\examples\QMLZXing. De momento solo la hemos probado sobre Win32, por lo que desconocemos como se comportará sobre otras plataformas.

image

QZXing soporta decodificación de códigos de barra de los siguientes tipos:

  • UPC-A
  • UPC-E
  • EAN-8
  • EAN-13
  • ITF
  • Code 39
  • Code 93
  • Code 128 (GS1)
  • Codabar
  • QR Code
  • Data Matrix
  • Aztec (beta)
  • PDF 417

También soporta codificación de tipo:

  • QR Code

 

Véase el siguiente ejemplo de como usar el decodificador desde QML:

import QZXing 2.3

function decode(preview) {
	imageToDecode.source = preview
	decoder.decodeImageQML(imageToDecode);
}

Image {
	id:imageToDecode
}

QZXing{
	id: decoder
	enabledDecoders: QZXing.DecoderFormat_QR_CODE
	onDecodingStarted: console.log("Decoding of image started...")
	onTagFound: console.log("Barcode data: " + tag)
	onDecodingFinished: console.log("Decoding finished " + (succeeded==true ? "successfully" : "unsuccessfully"))
}

Para la codificación de un código Qr usamos un proveedor de imágenes que se registra al iniciar le plugin. Véase el siguiente ejemplo de como usar el codificador de códigos Qr desde QML:

import QZXing 2.3

TextField {
	id: inputField
	text: "Hello world!"
}

Image{
	source: "image://QZXing/encode/" + inputField.text;
	cache: false;
}

 

Como pod√©is apreciar es relativamente sencillo de usar. Pero no os enga√Ī√©is, es realmente poderoso.

 

Ejemplos de uso de QZXing en Velneo

En la zona de descargas, podr√°s encontrar un fichero VIN con cuatro los ejemplos funcionales. Trabajo ha costado conseguir que todos ellos funcionen correctamente, algunos de ellos los hemos tenido que revisar y corregir de forma profunda ya que no eran funcionales en primera instancia.

image

Lector de códigos desde imágenes con soporte Drag N Drop. Permite leer las imágenes mediante Drag N Drop dentro de velneo y obtener el Tag que se encuentre en ellas. Soporta todos los Decorders que veis en la captura.

image

Lector en vivo de etiquetas Qr. Es una implementación que permite leer códigos Qr en vivo. Acerca uno a tu webcam y verás como funciona.

image

Codificación de códigos Qr. Como podéis apreciar, es relativamente sencillo, el problema es que solo soporta códigos Qr.

image

Lector de códigos bajo demanda. Poco que decir… acercas el código a leer, pulsas en Decode y obtendrás un cuadro de dialogo con el código leído.

image

Descargas

Como podéis apreciar, funcionalmente es una gran librería. Os dejamos disponible todo lo necesario para que podáis disfrutar de ella en Velneo 7.22.1.

Descargar código fuente del plugin QML de QZXing para v7.22.1Descargar código fuente

 

Recuerda que esta librer√≠a tendr√°s que compilarla para la versi√≥n adecuada de tu vClient. Para facilitarte el trabajo, hemos empaquetado la versi√≥n para Windows x32 en un descargable. Solo tienes que copiar el contenido dentro de la carpeta Velneo (donde est√° ubicado el ejecutable del vClient.exe). Aseg√ļrate de que el plugin queda dentro de la carpeta qml del directorio de instalaci√≥n de Velneo.

Descargar Plugin QML para Velneo v7.22.1Requiere estar registrado

 

También os damos acceso al VIN de todos los ejemplos funcinando en Velneo V7

Descargar VIN con los ejemplos de QZXing para Velneo v7.22.1Requiere estar registrado

 

Con un poquito de trabajo podr√°s integrarla en tus desarrollos para conseguir grandes mejoras en tus aplicaciones Velneo. Pero, ante todo, no se te olvide respetar la licencia Apache 2.0.

 

 

 

 

Desarrollar plugins QML para Velneo

En el anterior artículo, instalamos todo lo necesario para empezar a desarrollar complementos QML para Velneo sobre Windows x32 y x64.

Hoy toca probar el entorno y desarrollar un primer complemento.

 

Hello World QML

Antes de aventurarnos con Qt5 es recomendable probar nuestro entorno.

Para ello desarrollaremos un hola mundo con QML, de esta forma garantizaremos que todo est√° en su sitio.

Dentro del QtCreator pulsamos en File > New Project

Seleccionamos Qt Quick Application ‚Äď Empty

image

Establecemos el nombre del proyecto y la ubicación.

Recomiendo una ruta corta para la ubicación de los proyectos (en mi caso uso C:\Qt\Proyectos\). Establécela como la por defecto.

image

Definimos la herramienta para generar las compilaciones (qmake por compatibilidad).

image

Establecemos la versión de Qt (no todos los tipos de plantillas permiten 5.6.X).

image

Seleccionamos el Kit Desktop Qt 5.6.2 MSVC2016 32bit o 64bit (seg√ļn corresponda)image

Y pulsamos en Finish

image

Debug

Para ejecutar en modo Debug sin depuración pulsamos en el botón Play (no lanza el depurador, solo ejecuta)

image

Si ya somos capaces de ejecutar nuestra App es que tenemos el compilador en su sitio.image

Para ejecutar en modo Debug con depuración pulsamos en el botón Play con cucaracha (lanza el depurador y ejecuta). Un depurador de los de verdad, aunque lo cierto es que los he visto mejores (también peores).

image

Si lanza el depurador correctamente, ya lo tenemos todo, nos podemos aventurar en algo m√°s complejo.

 

Release

Para compilar la versión final (la que vamos a desplegar en Velneo) cambiamos el modo a Release.

image

Para compilar, depurar o ejecutar disponemos del men√ļ Build.

image

Desarrollando nuestro primer plugin QML

Lo b√°sico ya lo tenemos claro, entorno, compilador y depurador. Ahora toca empezar con la parte dura del asunto, desarrollar un plugin c++/qml. Pero antes de empezar toca aprender un poco, toca leer al respecto http://doc.qt.io/qt-5/qtqml-modules-cppplugins.html

Un plugin QML es una librería que contiene una clase que hereda de QQmlExtensionPlugin. QtCreator dispone de una plantilla para crear extensiones (Qt Quick 2 Extension Plugin), por lo que no nos tenemos que enredar demasiado, deja que QtCreator te ayude.

image

Le damos nombre a nuestro Plugin. Este nombre se usará como nombre del archivo de nuestra librería y como nombre de plugin.

image

Creamos una clase que contendrá el elemento QML que usaremos desde Velneo. También tenemos que definir la URI de los componentes. Esta URI se usará como ruta de los ficheros y como nombre del módulo.

image

Finalizamos el asistente y obtenemos el código de nuestro plugin en base a la plantilla. Observa que la clase de nuestro plugin hereda de QQmlExtensionPlugin. Fíjate en la función registerTypes(). Esta función se encarga de registrar los tipos disponibles en nuestro plugin. Date cuenta de que usa la URI que hemos fijado en el asistente.

image

En la implementación de la función registerTypes() puedes apreciar como se llama a qmlRegisterType que es la encargada de registrar el tipo de elemento dentro de la ejecución del plugin. En nuestro caso MyHelloWorldItem.

image

La clase MyHelloWorldItem, es la que contendrá el código de la implementación de nuestro primer componente. Evidentemente, implementaremos algo muy simple, para entender como encajan todas las piezas.

La clase MyHelloWorldItem hereda de QQuickItem (elemento m√°s b√°sico de QtQuick).

image

Como veis en la propia documentación del código, QtQuickItem no pinta nada. Si quieres que pinte algo, pues toca implementarlo (puede que lo que quieras es hacer algo en C++ en segundo plano, por ejemplo montar un complemento para guardar ficheros en el disco).

Como os podéis imaginar. podemos implementar desde esta clase base o desde una especializada (que herede de ella). Por por poner un ejemplo, si queremos pintar algo en pantalla, podemos partir desde la clase QQuickPaintedItem

image

Para el ejemplo, vamos a pintar un rect√°ngulo cuadrado de un cierto color. Algo sencillo que todos podamos entender.

La clase QQuickPaintedItem dispone de un método paint() que permite pintar elementos. Si queremos pintar un rectángulo, drawRect() nos valdrá.

image

 

Como veis, fijamos el color mediante la función setPen, y lo leemos desde una variable privada llamada m_color.

Si queremos que esta variable pueda ser establecida desde Velneo, tenemos que definir una variable publica llamada color e implementar los métodos Get y Set

image

Y establecer el comportamiento en el fichero.h de cabeceras de la clase. El fichero de cabeceras quedará tal que así:

image

A observar‚Ķ la definici√≥n de la se√Īal de control del cambio de color, la variable p√ļblica y el m√©todo setter. Por √ļltimo el como establecemos una Q_PROPERTY que se pueda invocar desde QML para que sea capaz de leer i escribir en el color.

Ya tenemos nuestro ejemplo. Ahora toca compilar en modo Release.

image

Y ya tenemos nuestra DLL. La copiamos a la ruta de Velneo‚Ķ pero no va sola (la acompa√Īa del fichero qmldir con la definici√≥n del plugin y del m√≥dulo).

Es importante darse cuenta de que la uri establecida condiciona la carpeta donde tenemos que ubicarla. No podemos dejarla tirada en cualquier sitio. Si la uri es ‚Äúcom.tipesoft.qmlcomponents‚ÄĚ, tendremos que crear una estructura de carpetas tal que ‚Äúcom/tipesoft/qmlcomponents‚ÄĚ donde dejar nuestra dll y nuestro fichero qmldir

image

El fichero qmldir lo podemos copiar desde C:\Qt\Proyectos\HelloWorldPlugin (lo creó en base a la plantilla).

imageAhora ya podemos implementar en Velneo lo necesario para cargar nuestro plugin.

image

Fíjate en el import (en base a la uri) y en el nombre del elemento QML (MyHelloWorldItem)

Si no establecemos ning√ļn color‚Ķ resulta en negro.

imageSi lo fijamos a ‚Äúred‚ÄĚ

image

Bueno… parece que ya lo tenemos. Sencillo no es, cierto. Pero estructuralmente son todos iguales.

Os dejamos todo el código necesario descargable desde el siguiente enlace.

Descargar ejemplos Plugin QML para Velneo v7.22.1Requiere estar registrado

Ahora os toca a vosotros

Por nuestro lado, seguiremos aportando nuevos art√≠culos de librer√≠as ‚Äúopen source‚ÄĚ que aporten gran valor a Velneo V7. Si os fij√°is en las capturas, tal vez apres√©is cual es la siguiente de la lista.

Compilar plugins QML para Velneo

La tarea de compilar plugins QML para Velneo, es fundamentalmente, un proceso .

 

Preparación del entorno

El primer paso, y tal vez el más pesado, es la preparación del entorno para compilar las librerías de forma adecuada (para hacerlo compatible con nuestra versión de Velneo).

Para saber que versi√≥n estamos usando de las librer√≠as Qt, podemos abrir el cuadro ‚Äúacerca de‚ÄĚ de cualquiera de los productos Velneo. En este cuadro se nos informa de la versi√≥n de Velneo, Sistema operativo, arquitectura y versi√≥n de Qt.

image

En la versión v7.22.1 se usa la versión de 5.6.2 de Qt.

Por otro lado necesitamos saber que compilador usa Velneo para esa versión. Como no lo sabemos, tenemos que suponérnoslo. En mi caso he supuesto que compilan con Visual Studio 2013. Con estos primeros dos datos, ya podemos empezar.

Resumiendo (en el escenario windows):

  • Plataforma: Windows
  • Arquitecturas: x32 y x64
  • Compilador: Visual Studio 2013
  • Versi√≥n de Qt: 5.6.2

 

Instalar el compilador

Identificada la versión de Qt y el entorno requerido procedemos a instalar el compilador compatible con nuestro entorno.

Por cuestiones de mi trabajo, habitualmente en mis m√°quinas, est√°n disponibles todos los editores y compiladores de Microsoft. Si en tu caso no dispones de ellos, solo tienes que descargarlos e instalarlos.

Tenéis dos opciones para ello:

  • Instalar Visual Studio 2013 Community – Update 5 (opci√≥n recomendada)Podemos instalar una versi√≥n gratuita de Visual Studio, que Microsoft nos facilita para empresas de peque√Īo tama√Īo, desde https://www.visualstudio.com/es/vs/older-downloads/. En el proceso de instalaci√≥n se requieren unos 10Gb de espacio para los componentes habituales.

image

 

Cualquiera de los dos procedimientos de instalación nos instala el comando cl.exe (compilador de nuestro código C++)

image

Instalar las herramientas de depuración

Lo segundo es instalar las herramientas de depuración. Curiosamente, estas herramientas no vienen incluidas en Visual Studio Community ni en las build tools.

Tenéis tres opciones para instalarlas:

 

Instalar Qt 5.6.2

Ahora nos toca el tercer paso. Instalar Qt en su versi√≥n ‚Äúopen source‚ÄĚ. Descargamos desde https://www.qt.io/download pulsando en ‚ÄúGo to open source‚ÄĚ

image

 

Aceptamos la licencia L(GPL) que nos obliga a que nuestro c√≥digo sea abierto y por √ļltimo descargamos el instalador. http://download.qt.io/official_releases/online_installers/qt-unified-windows-x86-online.exe

Abrimos el instalador… siguiente, siguiente… paciencia… le decimos la ruta de instalación… hasta que nos pida los componentes a instalar:

image

Marcamos Qt 5.6 (equivale a la rama 5.6.2) para msvc2013 en                                                                                                           x32 y si lo deseas en x64

También puedes marcar aquellos plugins QML que deseas incluir en tu instalación (además de los por defecto que ya incluye el instalador de la versión elegida). Los marcados como TP son en fase beta. Los marcados como Deprecated desaparecerán en Qt 6.x

Si para más adelante… deseas compilar y depurar sobre Android necesitas marcar un par de cositas más. El compilador MiniGW y el soporte CDB para el depurador.

image

Marcado todo lo necesario… procedemos con la instalación.

Arrancamos QtCreator

Cuando tengamos instalado Qt, procedemos a arrancar QtCreator.

Para comprobar que todo ha ido bien, tenemos que entrar en Tools > Options.

Dentro de la sección Build & Run veremos los Kits que están configurados… en vuestro caso Desktop Qt 5.6.2 MSVC2013 32bit y 64bit. Si aparecen en rojo o no aparecen… malo, no ha detectado los compiladores. Si aparece en amarillo… malo, puede que no haya detectado las herramientas de depuración. Si todo está perfecto, ya tienes el entorno preparado para compilar bajo Windows

image

Para el siguiente artículo, si creéis que es necesario, os cuento como desarrollar un plugin QML para Velneo (comentar en este artículo si consideráis para que así me anime a ello).

 

 

Box2D en Velneo

Otra librería que aporta valor a la comunidad Qt es Box2D.

¬ŅQu√© es Box2D?

Es un motor de f√≠sica 2D (para video juegos entre otras cosas). Box2D ha sido desarrollado por Erin Catto, bajo la licencia zlib. Si bien la licencia zlib no requiere acuse de recibo, informamos p√ļblicamente del creador para que conste.

image

Para más información visita http://www.box2d.org, http://box2d.org/downloads/ y https://github.com/erincatto/Box2D

Entendido… pero a priori este motor de física 2D no está soportado en Velneo V7.

 

QML Box2D plugin

Como os podéis imaginar, Box2D no lo podemos integrar directamente con Velneo. Pero desde que tenemos QML hay solución para casi cualquier integración con C++.

Para este casos necesitamos un plugin QML… tal como este https://github.com/qml-box2d/qml-box2d. El objetivo de este complemento qml-box2d es exponer la funcionalidad de Box2D (C++) como un complemento QML para facilitar el desarrollo de software basado en física 2D sobre QML.

Pues parece que si es posible soportarlo en Velneo, mediante un plugin QML, de licencia abierta, incluso para uso comercial https://github.com/qml-box2d/qml-box2d/blob/master/COPYING

¬ŅNos ponemos manos a la obra? Venga va‚Ķ¬† veamos si somos capaces de conseguir hacerlo 100% funcional. 20 minutos despu√©s‚Ķ

Ca√Ī√≥n:

image

y unos pocos remates…

Modo debug:

image

Demolición:

image

Cuerda de la ropa:

image

Test con elementos fijos:

image

Esfuerzo de torsión:

image

Unión de elementos:

image

 

Pues parece que funciona correctamente. Bienvenido sea entonces.

Descargas

Un gran motor 2D para que lo puedas disfrutar o integrar en tus desarrollos de código abierto Velneo:

Descargar Box2D para v7.22.1Requiere estar registrado

Recuerda que este motor usa las librer√≠as de Box2D por lo que tendr√°s que compilarlas para la versi√≥n adecuada de tu vClient. Para facilitarte el trabajo, hemos empaquetado la versi√≥n para Windows x32 en un descargable. Solo tienes que copiar el contenido dentro de la carpeta Velneo (donde est√° ubicado el ejecutable del vClient.exe). Aseg√ļrate de que el plugin queda dentro de la carpeta qml del directorio de instalaci√≥n de Velneo.

Descargar Box2D para v7.22.1Requiere estar registrado

 

Ya tienes una nueva herramienta. ¬ŅTe animas a realizar el primer videojuego en Velneo? o tal vez encuentres un lugar m√°s adecuado en tus desarrollos para este complemento.

 

QtAV Video Player para Velneo

Como os anunciamos en el √ļltimo art√≠culo, hemos empaquetado y preparado una soluci√≥n Velneo en base al reproductor QtAV de Qt. La versi√≥n empaquetada es la 1.11.0 de QtAV, ya que la 1.12.0 adolece de ciertos problemas de compatibilidad con Qt 5.6.2, que es la versi√≥n de Qt que usa la √ļltima versi√≥n de Velneo 7.22.1.

Este reproductor es un fork adaptado a Velneo, con decenas de correcciones. Se han implementado para poder adaptarse correctamente a Velneo. En este proceso hemos intentando mantener el 100% de la funcionalidad de la versión original.

Como os podréis imaginar, sigue nuestra política de código abierto respetando la licencia de QtAV. En este caso LGPL v2.1 para las librerías y GPL v3 para el reproductor.

QtAV is a multimedia playback library based on Qt and FFmpeg. It can help you to write a player with less effort than ever before.

QtAV is free software licensed under the term of LGPL v2.1. The player example is licensed under GPL v3. If you use QtAV or its constituent libraries, you must adhere to the terms of the license in question.

 

Funcionalidades QtAV Video Player para Velneo

Dispone de un panel de información del medio que se está reproduciendo.

image

Como podéis observar, también dispone de la posibilidad de visualizar el frame de un cierto momento de la reproducción en tiempo real.

Posibilidad de cambiar el Video Codec (si est√° disponible)

image

Soporte para efectos y ajustes de imagen.

image

Historial de reproducción

image

Soporte de esquemas de audio, audio tracks con soporte interno y externo.

image

Miscel√°neos

image

Captura de frame en reproducción

image

Cuadro de dialogo Acerca de

image

 

Otras funcionalidades:

  • Soporte para pantalla completa
  • Control de volumen
  • Control de reproducci√≥n completo

Teclas aceleradoras:

  • O: Abrir un fichero
  • Espacio: pausa/continua
  • F: Pantalla completa on/off
  • N/B: muestra el siguiente/anterior frame. Continua la reproducci√≥n mediante la tecla “Espacio”
  • Q: Sale del reproductor
  • R: rota la pantalla 90
  • T: rota la pantalla ‚Äď90
  • C: captura de pantalla
  • M: muta el sonido on/off
  • A: cambia el radio del aspecto
  • Arriba / Abajo: sube o baja el volumen + / –
  • +/-: Incrementa/decrementa la velocidad de reproducci√≥n
  • Ir hacia delante/detr√°s
  • Arrastra y suelta un fichero sobre el reproductor para iniciar la reproducci√≥n de un nuevo fichero

Un gran reproductor para que lo puedas disfrutar o integrar en vuestros desarrollos de código abierto Velneo:

Descargar Reproductor QtAV para v7.22.1Requiere estar registrado

Recuerda que este reproductor usa las librerías de QtAV por lo que tendrás que compilarlas para la versión adecuada de tu vClient. Para facilitarte el trabajo, hemos empaquetado la versión para Windows x32 en un descargable. Solo tienes que copiar los binarios dentro de la carpeta Velneo (donde está ubicado el ejecutable del vClient.exe):

Descargar QtAV para v7.22.1Requiere estar registrado

Código fuente QML del reproductor portado:

Descargar c√≥digo fuente de QtAV para VelneoDescarga p√ļblica del c√≥digo fuente

QtAV en Velneo

En la comunidad Qt hay decenas de proyectos muy interesantes, entre ellos destaca QtAV. QtAV es una biblioteca de reproducción multimedia basada en Qt y FFmpeg. Esta librería es interesante por muchos motivos, entre otros, la compatibilidad de formatos y plataformas.

QtMultimedia, como pudimos ver en el anterior artículo, sufre de ciertos problemas de rendimiento en equipos de bajas prestaciones. Por este motivo nos vimos en la necesidad de evaluar QtAV, para remplazar y mejorar las características multimedia de Qt en ciertos proyectos.

Características de QtAV

Como características principales de QtAV tenemos:

  • Soporte de decodificaci√≥n por hardware: DXVA2, VAAPI, VDA/VideoToolbox, CedarX, CUDA(the 1st player support CUDA on linux?)
  • Soporte a OpenGL y ES2 para la mayor√≠a de los formatos, incluyendo videos Hi10P
  • Pre-visualizaci√≥n en tiempo real
  • Captura de video en formato rgb y yuv
  • OSD y filtros personalizables
  • Filtros en libavfilter, por ejemplo‚Ķ stero3d, blur
  • Reproducci√≥n frame a frame
  • Control de velocidad de reproducci√≥n
  • Soporte a distintos tipos de flujos: ficheros locales, http, rtsp etc… incluso puedes crear tus propios flujos
  • Canal de Audio, tracks y tracks externos
  • Selecci√≥n de track de subtitulos. Puedes cambiar din√°micamente entre el motor FFmpeg y libass
  • Puedes cambiar din√°micamente de motor de renderizado, incluso cuando est√°s reproduciendo
  • Multiples salidas de video para un solo reproductor
  • Video eq(software y OpenGL): brillo, contraste, saturaci√≥n‚Ķ
  • Soporte para QML. La mayor√≠a de su API es compatible con el m√≥dulo QtMultimedia (facilitando la portabilidad)
  • QtAV soporta Qt4 y Qt5, FFmpeg(>=1.0) y Libav (>=9.0).

Reproductor QtAV b√°sico

image

Reproductor QtAV y soporte para filtros

image

Reproductor QtAV y soporte para Multi-ventana.

image

Descargar y probar los ejemplos

Para que podáis evaluar QtAV sobre Velneo, hemos preparado un ejemplo básico (mejorando el entregado en el anterior artículo referido a QtMultimedia).

Descargar ejemplo de QtAV para v7.22.1Requiere estar registrado

Además del ejemplo, tenéis que compilar las librerías necesarias.

https://github.com/wang-bin/QtAV/wiki/Build-QtAV

Básicamente tenéis que seguir los pasos que os indica en el tutorial de compilación.

Si por el contrario, no queréis sufrir el proceso de compilación, podéis descargarlo desde el siguiente enlace.

Descargar QtAV para v7.22.1Requiere estar registrado

Estas librerías se tienen que ubicar en las carpetas raíz de Velneo y en el directorio qml.

Si os parecen interesantes estos ejemplos… esperar a el port que hemos realizado para Velneo del reproductor de QtAV

image

 

 

 

 

 

QtMultimedia en Velneo

Hemos realizado un fork de algunos de los ejemplos de QtMultimedia (Qt 5.6.2 ) para evaluar el comportamiento dentro Velneo v7.22.1. Las pruebas las hemos realizado en una m√°quina de bajas prestaciones (https://androidpc.es/blog/2017/08/16/review-beelink-s1/) para evaluarlo en un escenario poco favorable.

image

image

El resultado… bastante tragón en CPU y GPU.

image

A√ļn siendo as√≠, el comportamiento es relativamente correcto en videos baja resoluci√≥n (menos de 1280×720).

image

image

Descargar QtMultimedia para V7Requiere estar registrado

Si le pedimos algo un poco más avanzado (video FullHD 1080p 60fps)… se producen salto de frames y pixelado.

image

También hemos probado el comportamiento de QtAV dentro de Velneo con videos FullHD 1080p 60fps… y lo cierto es que mejora de forma considerable (en FullHD ya no se producen errores gráficos).

image

Aunque el consumo de CPU y GPU sigue siendo muy alto.

image

Os anexamos el ejemplo QtMultimedia usado para las pruebas. Estaría bien que nos dieseis vuestro feedbak en los comentarios.

Descargar QtMultimedia para V7Requiere estar registrado