Using a LeapMotion for Qt inputs

We are still working on our project Tepee3D and although we have not yet reached the popularity we hoped too, this project has allowed us to work on many interesting aspects, one of which is adding LeapMotion inputs to our application.
For those of you who don’t know what a LeapMotion is, it is a small sensor about the size of a lighter that you can use to track hands movement in space.
You can find more information about it on the LeapMotion web site.

Leap Motion

Leap Motion (Photo credit: khawkins04)

There are several ways to interact with an application using the LeapMotion sensor. However as Tepee3D has mainly been focused on touch and multitouch inputs, one simple way to use the LeapMotion was to convert fingers 3D position in Qt touch points so that they could then be used in QTouchEvent or QMouseEvents without having to rewrite the entire application.

For the specific gestures (swipe, circle, screentap, keytap) offered by the Leap SDK, creating a custom QtQuick/QWidget element that will handle these is a clean way to include the additional inputs of the LeapMotion without compromising touch and mouse inputs on platforms that do not have access to a LeapMotion.

Though originally developed for Tepee3D, this library is made to work with any Qt/QtQuick application.

Those not interested by the code explanation below, you can directly obtain the sources and a sample project here.
Continue reading

Building a remote compilation service for various Qt targets

Targeting many platforms with the same code base is the reason why many of us choose to use Qt. In the Tepee3D project, we would like to attract people to develop widgets using Qt and Qml. Currently, Tepee3D runs on 8 platforms and asking developers to compile their widgets for each of these platforms would be a lot of troubles. In case a new platform is added, they would have to find a way to either crosscompile Qt for that platform or have a dedicated system for it on which to compile it.

On the other hand, building a remote compilation service where developers can request their widget to be build on a given platform would solve that issue. Using Jenkins would be a solution but setting up a dedicated queueing system where build requests can be distributed to nodes that are configured to build a given platform wouldn’t be much harder.

Continue reading

Deploying Qt Applications on Linux and Windows

One of Qt’s greatest strength is also one of its major weakness. The code once deploy everywhere motto is nice when coding but once you reach the deployment step, it gets a whole different meaning.

As we are getting ready for the alpha release of Tepee3D (and almost a week late), I thought I’d post about what made us lose time.

Before creating installers for each of the platforms you are targeting, you have to run your application without the whole Qt environment on each of those.

There are two ways two proceed, either by compiling Qt statically against your executable or by delivering the necessary Qt libraries with your application.

Continue reading

The power of qobject_cast

One feature we wanted to implement in Tepee3D was a Services Manager that would allow various classes to interact with Services provided through shared libraries. Those services are axed toward database management, web services access and platform specific interactions such as posting notifications on Android and so on. That mechanism allows us to add new features during the course of the developement without having to modify the main application’s structure or void any previous work. Continue reading

Qt3D Repeater and Loader bug – Part 2

In my previous post, I talked about an important issue encountered with Qt3D 2.0 that would not allow Item3D in Repeater or Loader element to be loaded by the rendering engine.

Before entering into the details of this bug solving, I’ll quickly explained how Qt3D is integrated with the new QtQuick 2.0 scenegraph. Continue reading

Qt3D Repeater and Loader bug – Part 1

While developing Tepee3D, we encountered a few bugs with the Qt3D module. Of course this is not something surprising as it is rather new and not officially part of the Qt 5.0 release yet. However, when having tight deadlines, waiting for someone else to solve them is not something to consider, especially when these bugs stop you and your team from progressing on your tasks. Trying to solve them and contribute to an open source project is a better way to handle such situations. Continue reading