Skip to content

Windows Dressing The Abbreviated Guide to Running Qt on Embedded Windows

Microsoft Windows has a long history of embedded operating systems going back to 1996, branded as Windows Embedded Compact, Windows Embedded CE, Windows CE, Windows Compact, Windows Phone, Windows Runtime, and an assortment of others. One of these fine platforms might even form the basis of your embedded product. Trouble is, with the shiny new Windows 10 IoT now on the horizon, this Windows Embedded family isn’t getting the love it used to.

Building a user interface? Let’s just hope your app isn’t still on MFC. Wait… it is? Sorry about that!

If you’re thinking about updating your Windows Embedded legacy app, you’ll need an updated UX framework: lightweight enough for real-time, powerful enough to support modern GPUs, kitted up with a huge assortment of cross-platform tools, and supported by a host of companies.

You can see where I’m going with this… you guessed it: Qt.

Assuming you want to facelift your Windows Embedded platform to use Qt, you’ve got one of three choices:

Windows Embedded Compact 7.0
Aliases WinCE7, WinEC7
Release date March 2011
MS tool version Visual Studio 2008
Qt version Up to Qt 5.6 LTS (Long Term Support)
Architectures supported x86, ARMv4+ (and derivatives)


Windows Embedded Compact 2013
Aliases WinEC2013
Release date June 2013
MS tool version Visual Studio 2012 (2013/2015 x86 only)
Qt version Qt 5.6 LTS (Long Term Support)
Architectures supported x86, ARMv7T2 (and derivatives)


Windows 10 IoT
Release date July 2015
MS tool version Visual Studio 2015
Qt version Qt 5.7
Architectures supported x86 (all variants), ARM (Mobile Enterprise and Core)


What’s the fine print? Like many things in life, no choice is perfect.

  • WinCE7 requires you to be using Qt 5.6 or earlier. But if you’ve got a WinCE7-based project already, this will certainly be the path of least resistance. KDAB has done the necessary work in Qt 5.6 to support WinCE7.
  • WinEC2013 on ARM requires Visual Studio 2012 for the right cross-compiler, and you’ll be using Qt 5.6. Unfortunately, you can’t use the more modern compilers in VS2013 or VS2015. x86 compiling should work on Visual Studio 2012-2015, although that highly limits your embedded target hardware. Similar to WinCE7, our changes to Qt 5.6 for WinEC2013 support are upstream.
  • Windows 10 IoT is still a bit of a moving target, but the Qt Company will be adding experimental support for it to Qt 5.7. If you don’t want to be building against an experimental drop, you may be better off sticking with one of the earlier two options.

Undertaking a move from a Windows-native UX framework to a Qt-based one isn’t for the faint of heart but it can be your important first step to making your application platform independent. (And it’s something that we at KDAB have a lot of experience doing should you need a bit of help.)

Likewise, getting all the right components, builds, compilers, libraries together for a solid tool chain isn’t supported out-of-the-box by anyone. We’re hoping to solve this problem in a better fashion. We’re working with Toradex—one of the world’s leading providers of windows embedded based Systems on Chip—on providing a Windows SOC with pre-built binaries and Qt installers. It’s not done yet, but keep watching this space for breaking news.

Any other Windows + Qt questions? Good tips or tricks? Post them in the comments!

2 thoughts on “Windows Dressing”

  1. Talking about Windows Embedded, one should also have Windows Embedded Standard 7 and Windows 10 IoT Enterprise in mind: Both come (AFAICT) with full Windows API support and make developing much easier, and they do not require a special port of Qt.

    As Maintainers of WEC and similar, what advantages do you see in WEC over WES ?

    1. The biggest and most important difference is that Windows Embedded Standard 7 and Windows 10 IoT is no Realtime Operating system, hence does not have a realtime scheduler, which is required for some applications.

Leave a Reply

Your email address will not be published. Required fields are marked *