Jeff Tranter

Jeff Tranter is a Qt Consulting Manager at ICS. Jeff oversees the architectural and high-level design of software systems for clients. Jeff’s leadership organizes global teams of developers on desktop and embedded applications.


Blog  •  May 10, 2017  •  By Jeff Tranter  •  Qt QML  •  Qt, Qt Creator, Yocto, IDE, SDK
In previous blog posts I've covered how to configure Qt Creator for development on Linux (1), Windows (2) and MacOS (3) desktop systems and for embedded development on the Raspberry Pi (4). We're often asked in our training classes and consulting projects how to set up the Qt Creator IDE for embedded development using the Yocto (5) framework. In this post I'll discuss how to do this, including instructions covering how to build a Yocto toolchain with Qt if you don't already have one from your hardware vendor. Prerequisites Development for Yocto is normally done on a Linux desktop...
Blog  •  April 12, 2017  •  By Jeff Tranter  •  Qt QML  •  Linux, Ubuntu, Windows
The Windows Subsystem for Linux (WSL) is a new feature of Windows 10 (1) that allows you to run native Linux programs directly on Windows, alongside other Windows applications. When WSL is enabled, it installs an Ubuntu user-mode image that was created by Canonical, the company behind Ubuntu Linux. It loads and runs the Linux Bash shell and provides many of the command-line tools that you would expect when running Ubuntu Linux. It is based on the Ubuntu 14.04.5 LTS release. Installation It is easy to install. (2, 3, 4) Turn on developer mode and then enable the Windows Subsystem for...
Blog  •  March 8, 2017  •  By Jeff Tranter  •  Qt QML  •  Qt
Two earlier blog posts (1) (2) covered how to set up Qt and Qt Creator on Windows and Linux systems. Let's look at installation on the remaining major desktop platform, macOS. Thanks to the unified Qt installer, the process is very similar to that on Windows and Linux, so we'll just cover some of the differences and highlights of the Mac install. Assumptions and Prerequisites For this example we'll install Qt 5.7.1, which is supported on macOS version 10.8 and later. The C++ compiler used by Qt on macOS is the Clang compiler, provided as part of the Xcode development tool....
Blog  •  February 1, 2017  •  By Jeff Tranter  •  Qt QML  •  Qt, Widgets, Python, PyQt, SIP, Qt Designer
In an earlier blog post (1) I described how to create a widget with a Qt Designer plugin interface so it can be viewed within Qt Designer. With the increased interest in using Qt from the Python programming language, I asked one of our developers to reproduce the same example, but implement the widget in Python with PyQt.  Not all the steps to do this are obvious so I'll walk you through. Example Files The download link (2) contains the example code referenced in this blog post. It includes the following source files: ledwidget.py: A port of...
Blog  •  January 4, 2017  •  By Jeff Tranter  •  Qt QML  •  Qt, Linux, C++, QML, Ubuntu
Happy New Year! In previous blogs I have covered installing Qt and Qt Creator on Windows and on Linux using the Qt installer and pre-built binaries. In this post, aimed at developers with novice-level Qt skills, we'll look at how you can build Qt yourself from source code. Rationale Why would you want to build Qt from source? While the downloadable pre-compiled binaries are convenient and save time, you may want to build Qt using a different configuration from that provided by The Qt Company. You may, for example, want to enable or disable different options...
Blog  •  December 21, 2016  •  By Jeff Tranter  •  Qt QML  •  Qt, QML, embedded systems, C++, IoT
As 2016 draws to a close, I'd like to take a look back at some of the significant events of the past year that are relevant to the Qt framework and the ecosystem around it. Qt Releases Starting in 2016, Qt 4 was officially at end-of-life status and no longer supported. The last release was Qt 4.8.7 in May 2015 and no new releases are planned. This past year introduced the first long-term support (LTS) release of Qt, following the model of some other open source projects like Ubuntu to make a commitment to support a release for five years. Currently, this is the 5.6 series with the...
Blog  •  October 26, 2016  •  By Jeff Tranter  •  Qt QML  •  Qt, Conference, Qt World Summit
I've just returned from the Qt World Summit conference and wanted to share a brief report on some of the highlights of the show. Held from October 18-20, 2016, this was the 13th annual Qt developer conference and the second under the banner of the Qt World Summit.  This year the summit was held at a prime location: the Pier 27 San Francisco Cruise Ship Terminal, which features a breathtaking view of the San Francisco Bay next to the Bay Bridge, and only is a short distance from attractions like San Francisco's famous Pier 39. The conference followed a similar...
Blog  •  October 12, 2016  •  By Jeff Tranter  •  Qt QML  •  Qt, Qt Creator, QML, Widgets, C++, IDE, Linux
My recent blog post covered how to set up Qt and Qt Creator on a Windows 10 system. In this post I'll look at how to configure a Linux system for Qt desktop development. Since the set up process on Linux is almost identical to that on Windows, rather than repeat the information I refer you to that blog. (Keep it handy, you'll need it later.) In this post, I'll cover the differences. Assumptions and Prerequisites For this example I will assume you want to install Qt 5.6.0 or 5.7.0 on a recent release of Ubuntu Desktop Linux. The procedure will be similar with other...
Blog  •  September 28, 2016  •  By Jeff Tranter  •  Qt QML  •  Qt, Qt Creator, QML, Widgets, C++, IDE, Windows
Feedback from our recent Qt for Beginners webinar series indicated a need for some basic tutorials for beginners. If you struggle with initially getting Qt set up for development with the Qt Creator IDE and a C++ compiler, this post is for you.  I'll walk you step by step through the process of getting a Qt development environment running on Windows, providing lots of screen shots to guide you. Assumptions and Prerequisites For this example I'll assume you are running Windows 10. We will install the Open Source version of Qt 5.7.0 using the MinGW C++ compiler and the Qt...
Blog  •  September 14, 2016  •  By Jeff Tranter  •  Qt QML  •  Yocto, Embedded, bitbake, ARM
I've mentioned the Yocto (1) embedded framework in previous blog posts. Some people may have shied away from trying it because they have heard it has a steep learning curve. While Yocto is complex, it is very easy to get started and you can do so without any embedded hardware. In this post I'll present a series of step-by-step instructions for building the Yocto-based Poky Linux distribution and running it under the Yocto emulator. The build environment will be Ubuntu desktop Linux but it should work much the same on any desktop Linux system. I've tested this on an Ubuntu 14...
Blog  •  September 2, 2016  •  By Jeff Tranter  •  Qt QML  •  Qt, QML, UX, Qt World Summit
Integrated Computer Solutions (ICS), a leader in Qt consulting, custom software development and user experience design, is proud to offer four tactical pre-conference training courses on October 18th at the 2016 Qt World Summit in San Francisco. Whether you’re new to Qt or a seasoned Qt developer, you’ll come away with actionable insight and fresh skills you can use to build compelling products and deliver engaging user experiences. Join us for one of these informative sessions: State-of-the-Art OpenGL and Qt Did you know that virtually all embedded platforms...
Blog  •  August 31, 2016  •  By Jeff Tranter  •  Raspberry Pi  •  Qt, Raspberry Pi, Bluetooth
While much attention has been focused on the built-in WiFi hardware, the Raspberry Pi 3 (1) also ships with on-board support for Bluetooth. Bluetooth is a wireless technology for exchanging data over short distances using 2.4 GHz radio signals. When running the recommended Raspbian Linux distribution, the Raspberry Pi uses the standard Linux Bluetooth software stack called BlueZ (2). Qt's Bluetooth module (3) on the Linux platform also supports BlueZ, which means that it works on the Raspberry Pi. Following the procedure in my recent blog post (4) to build Qt will provide support...
Blog  •  August 17, 2016  •  By Jeff Tranter  •  Qt QML  •  Qt, QML, gamepad, gaming, Qt 5.7.0
Qt Gamepad is a Qt module that supports the use of gamepad hardware. Gamepad is the term used to refer to input devices with buttons, directional controls (which may be digital joypads or analog joysticks), and sometimes keys for keyboard input. Used on video game consoles, they are also available for personal computers. (They typically connect using a USB interface.) The Qt Gamepad module is new in Qt 5.7.0 and provides both QML and C++ interfaces. It is considered a tech preview release in Qt 5.7.0, which means that the APIs are still subject to change in the future. The module...
Blog  •  August 3, 2016  •  By Jeff Tranter  •  Qt QML  •  Qt, Qt Creator, Raspberry Pi
While it is not the only option, Qt Creator is the integrated development environment (IDE) of choice for Qt. It provides good support for developing for embedded systems, including cross-compiling, deploying to a target system, debugging and profiling. It's free, well documented (1), and actively developed. Configuring Qt Creator for embedded development is sometimes a stumbling block for our Qt training students and consulting customers. In our recent Qt For Beginners webinar series (2) it was suggested we present detailed instructions showing how to...
Blog  •  July 27, 2016  •  By Jeff Tranter  •  Qt QML, Raspberry Pi  •  Yocto, Raspberry Pi, Qt, QML, bitbake
Yocto(1) is a software framework for embedded Linux systems. We've looked at it in previous blog posts(2). It forms the basis of many embedded Linux distributions, including The Qt Company's boot2qt that is part of their commercial product Qt For Device Creation(3). Knowledge of Yocto is a very desirable and marketable skill to have for anyone working with embedded systems. While you can use emulators that run on a desktop Linux system, there is no substitute for experience with a real embedded board. Yocto supports a number of embedded hardware platforms, one of the most popular...
Blog  •  July 12, 2016  •  By Jeff Tranter  •  Qt QML  •  Python, scripting, language, Qt
In this, the final installment of the blog series on Python, we'll look at modules and how object-oriented programming is supported. We'll take a brief look at two of the popular bindings for Qt from Python: PyQt and PySide. I'll wrap things up with some tips for effective programming and references for learning more. Modules Python includes a set of standard libraries, divided into packages and modules. A module is a collection of Python definitions and statements and possibly a main program (which does not automatically get run when the module is imported). A package is a...
Blog  •  June 24, 2016  •  By Jeff Tranter  •  Qt QML  •  Qt, QML
Get the full on-demand video here: http://www.ics.com/webinars/qt-beginners-part-5-ask-experts In QML, I have a Text item with wrapMode: Text.Wrap but the text isn't wrapping. What am I doing wrong? You need to set the width of the Text element, either directly using the width: property or by using anchors. Please refer to slide 3 of the presentation deck for some sample code that you can try. Would it be possible to go into more detail with kit configuration for cross-platform development and remote deployment? Preferably with device configuration and deployment demonstration....
Blog  •  June 22, 2016  •  By Jeff Tranter  •  Qt QML  •  ICS, Python, scripting, language
Continuing our three-part series on the Python programming language, in this post we'll look at more of the core language features. File I/O Python provides a number of functions for file input and output, similar to what is provided in standard libraries for languages like C and C++. Shown below are examples of some of the more commonly used functions to give you a flavor for what is offered. Most of these should be self-explanatory. The last function may not be as obvious -- it prompts the user and reads from standard input. f = open("filename", "w", encoding="utf8") f.write("...
Blog  •  June 8, 2016  •  By Jeff Tranter  •  Qt QML  •  Python, scripting, language, Qt
Qt programmers traditionally program in the C++ language. It offers a number of benefits, including performance, the ability to do systems programming and to scale from small to very large systems. But the language is quite complex. My copy of the book The C++ Programming Language, 4th edition has 1,346 pages! Scripting languages are less cumbersome, offering a number of advantages, including more widespread familiarity among developers, that can make them attractive for certain applications. For instance, most Qt developers are likely familiar and comfortable with the JavaScript...
Blog  •  May 25, 2016  •  By Jeff Tranter  •  Raspberry Pi  •  Raspberry Pi, Bluetooth, Qt
It has been just over four months since my last blog post on the Raspberry Pi (1). Since then, the project has continued to move forward and I thought it was appropriate to write a new update. The Raspberry Pi 3 Raspberry Pi 3 (image credit: Tech Radar) In my last blog post I covered the Raspberry Pi Zero, which offers similar functionality to the Raspberry Pi 2 at the ridiculously low cost of 5 dollars. Shortly after that blog was written, the Raspberry Pi Foundation announced the Raspberry Pi 3 Model B. This third generation version of the device offers a faster 1.2 GHz 64-bit...
Blog  •  May 11, 2016  •  By Jeff Tranter  •  Qt QML  •  Swift, C++, Objective-C, Mac OS, Apple, Qt
The preferred programming language for developing on Apple platforms has been Objective-C (1), going back to the 1990s when Apple acquired the NeXTSTEP operating system from which OS X is derived. Like C++, Objective-C adds object-oriented programming support to the C programming language. In 2014, Apple introduced the new Swift (2) language, which was characterized as "Objective-C without the C". Swift is now being promoted as the replacement for Objective-C and many developers are moving to it for application development on Apple platforms. As a proprietary language that was only...
Blog  •  April 27, 2016  •  By Jeff Tranter  •  Qt QML  •  Qt, QML
Ask your Qt Questions Questions and Answers from Qt for Beginners Part 1 - Overview and Key Concepts   What is Qt's take on T2S applications? Assuming this refers to TARGET2-Securities, the European securities settlement engine, I don't know of anything relevant in Qt except possibly the Qt Purchasing API which supports In-App Purchases, but could potentially support other financial features in the future.   Does the += mean to add to the existing variable definition? In the context of the QString class, the += operator is overloaded to perform string...
Blog  •  April 27, 2016  •  By Jeff Tranter  •  Qt QML  •  Qt, Logging, syslog, journald
It is often desirable to log events from an application, like errors or debug information, to a log file or even to a different computer. A new feature of Qt in version 5.6.0 is the ability to direct the output of the commonly used Qt message logging functions to the standard syslog and journald logging systems available on most Linux platforms. In this blog post, we'll look at how to use this new facility, including example code. We'll also look at how you can implement this using a custom message handler so you can support different logging back ends, even with versions of...
Blog  •  March 30, 2016  •  By Jeff Tranter  •  Qt QML, IOT  •  Internet of Things, IoT, Qt
This is the second and final installment of my blog series on Qt and the Internet of Things, based on a presentation (1) I gave at the Qt World Summit 2015 entitled The Internet of Things: What Is It and Why Should I Care? In the first blog post I discussed what IoT was, covered some terminology and sample products, projected growth and market opportunities and what it means to software developers. In this post, I will look at some of the popular hardware platforms for IoT, mention a few of the key protocols, hardware technologies and software frameworks and discuss some of the areas...
Blog  •  March 16, 2016  •  By Jeff Tranter  •  Qt QML  •  Qt, CAN bus, Modbus, IoT, Embedded
QtSerialBus is a new Qt module, introduced as a technical preview in Qt 5.6.0. It supports two serial interface protocols that are commonly used on embedded systems: CAN bus and Modbus. In this blog post we'll take a brief look at this new module and what it provides. What is CAN bus? CAN bus (1), or Controller Area Network bus, is a vehicle bus standard that allows microcontrollers and devices to communicate with each other in applications without a host computer. It is a multi-master serial bus where all nodes are connected to each other through a two wire bus. A message-based...
Blog  •  March 2, 2016  •  By Jeff Tranter  •  Qt QML  •  Qt, QML, OProfile, performance, profiling, tools
As a developer, there are a number of useful tools that you always want to have in your arsenal for testing and debugging. This includes debuggers, memory checkers and performance profilers. In this blog post I would like to present some information about a profiler tool that I feel deserves more recognition: oprofile. What It Does Oprofile (1) is an open source tool for statistical performance profiling. It runs on Linux systems and uses the hardware performance counters of the CPU to perform profiling of code with low overhead. It allows all code to be profiled including...
Blog  •  February 17, 2016  •  By Jeff Tranter  •  Qt QML, IOT  •  Internet of Things, IoT, Qt, Internet of Everything
Gartner, Inc. forecast last year that 4.9 billion connected devices would be in use in 2015, up 30 percent from 2014, and the number will reach 25 billion by 2020. They describe the Internet of Things (IoT) as "a powerful force for business transformation, and its disruptive impact will be felt across all industries and all areas of society." What exactly is IoT? As a software developer, does it really represent something new? In this blog post, the first of a series, I will present an overview of IoT, covering what IoT is and is not and define some terms. I will also list some...
Blog  •  February 3, 2016  •  By Jeff Tranter  •  Qt QML  •  Qt, QML, Qt 4, Qt 5, porting
Looking for a New Year's resolution for 2016? Official support for Qt version 4 came to an end in December 2015. Qt version 5 first came out in 2013 and is currently at version 5.5.1, with the 5.6.0 release coming early this year. Qt 5.6.0 will be the first LTS (Long Term Support) release, with a commitment to be supported for three years. If you are still using Qt 4, it really is time to start thinking about migrating your code to Qt 5. In a previous blog post (1), written almost exactly three years ago, I discussed my experiences porting about 14,000 lines of Qt widget-...