Qt development with linuxmce

From LinuxMCE
Jump to: navigation, search

This article will explain how to utilize the Qt development framework with linuxmce. Currently, there are a few different types of devices that utilize the Qt framework within linuxmce

  • Hue Controller - For controlling Phillips Hue color changing LED lights using QtNetwork to interface with the JSON api of the device.
  • linuxmceTag - A simple command line media scanner which scans video files, and then does its best to lookup information via online api's to fill in metadata
  • QOrbiter - Graphical user interface for linuxmce, allowing one to have classic orbiter functionality.

General Requirements

These are the general requirements for working with Qt and linuxmce to develop devices

  • Qt Development SDK - http://www.qt.io/download/
    • Choose the open source version. This will allow you to download the source as needed, libraries, and the IDE, Qt Creator.
    • If you are targeting Qt4, you would best apt-get install qt4-dev-tools. This will pull in Qt4 libraries and the Qt Creator for qt4. Please note if creating a new project, you will be politely asked to use Qt5. Qt4 based projects are scheduled to be moved to Qt5.
  • A functioning linuxmce installation, VM or otherwise.


Once you have setup your linuxmce box according to the article above,you will be ready to start development. We should note here that in the case of most of the Qt applications developed specifically for linuxMCE, the shared lib approach commonly taken by other DCE device is not used. Instead of linking against libraries, the headers are included as needed. Why do it this way? Well in the case of IOS and Android, and a few other embedded devices, this would make life more difficult than it actually needs to be. For the purposes of development when using x86 based machines, it also makes sense. So, please dont ask for this to change, unless you can demonstrate a patch that solves the problems as mentioned.

For certain embedded builds of Qt, we will try to, in the future, create a tgz with the needed cross-compiled Qt libraries.

Working from your own linux machine

Working from one's own linux machine can be beneficial from the standpoint using the most familiar development environment. Some things must be take into consideration however.

  • If your device is a plugin, this method is not open to you. Plugins run in the router memory space and this means they cannot be run from remote machines. It wouldn't even be wise to try.
  • Passing command line parameters to the device, will allow you to run it from your machine, but connected to the router.
    • Pass '-r <yourcoreip>' for the router. It defaults to 192.168.80.1
    • Pass '-d <devicenumber>' for the device number.

Working on your core

Working on the core can be beneficial from the standpoint of

  • no need to move file(s) across network
  • compile in native environment

Both of these are useful, but debugging and gui functionality will be limited.

Working on an embedded device

You will need:

  • A version of Qt compiled for your target platform
  • A cross-compiler toolchain