- Qt on PixelBook, Raspberry Pi and Atomic Pi
Niels Mayer will demonstrate mobile Qt development on the Google PixelBook and discuss the Raspberry Pi and Atomic Pi as open-source "IOT" platform for Qt apps running on Raspberry Pi and the Atomic Pi. The Google Pixelbook now supports running an x86 Linux container as a standard feature, alongside Android containers. This allows qtcreator and Qt to run on the pixelbook just like on the desktop. Alas the current Linux implementation has no support for GL acceleration so only standard GUI apps like qtcreator can run happily in Linux on the Pixelbook (at the moment). However Android apps are fully accelerated. We will discuss Pixelbook as mobile development environment -- in that the developer can be mobile, but also develop and test Android apps with full acceleration and interactivity unlike what you'd see using an emulator. Niels will demonstrate what this looks like and give simple tips needed to setup qtcreator for on-device Android deployment. The Raspberry Pi is a somewhat crippled platform for graphically intensive (e.g. GL) apps due to its proprietary and not entirely performant or compatible closed-source GPU "blob" delivered with the Raspbian Operating system (aka "Debian Stretch"). This only delivers a working "EGLFS" backend for GL-needing Qt apps. We will demonstrate that on the Raspberry Pi, some Qt-based graphical apps work fine, whereas others don't. Less demanding apps will also run happily on the raspberry pi unaccelerated with the "linuxfb" or "xcb" backends under X windows. Headless operation using the new/experimental "webgl" is also possible -- but doesn't work for more demanding apps due to webgl or compatibility. In contrast, the Atomic Pi board is kind of unusual; priced similarly to the Raspberry Pi at $37 -- it has a real GPU with full open-source support on Linux. When Niels queried on IRC regarding Raspbery-Pi issues he faced ( https://github.com/QUItCoding/qnanopainter/issues/45 ) Thiago's answer was "get a device with better GL support" . That's where the Atomic Pi wins. Its stock preinstalled operating system is Ubuntu 18.04LTS running Lxde. It has GL support "built in" and working "out of the box" . It runs Qt and GL-based Qt apps exactly like they'd run on a x86 Linux destkop because it is a x86 Linux desktop. For the Raspberry Pi, we will discuss successful Qt5.12.3 compilation following hints from https://www.tal.org/tutorials/building-qt-512-raspberry-pi as well as going off-script to compile the entire source and all Qt graphics backends: "eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, webgl, xcb" . For the Atomic Pi you can just install the Qt[masked] open source distribution and qtcreator and have a full (but slow) development environment. You can also just install Qt5.12.3 (or use Qt 5.9 libs supplied with Ubuntu) to provide the Qt libraries for Apps you develop on the desktop -- using the same exact libraries installed on the Atomic Pi. As Qt on the Atomic Pi works just like on the desktop, there's not much to talk about -- so we'll just demo some graphical Qt apps on the Atomic Pi to show they have decent performance. Both Pi and Pixelbook platforms also have older Qt and qtcreator available prepackaged if your usage of the Qt5.12.3 distribution falls outside of licensing or is not open-source and amenable to GPLv3 strictures. The Atomic Pi, courtesy of Ubuntu[masked] LTS, has built-in Qt "5.9.5+dfsg-0ubuntu2.1" ; the Raspberry Pi, courtesy of Debian 9, has "5.7.1+dfsg-3+rpi1+deb9u1" ; The Pixelbook's Linux is also based on Debian 9 and also has qtcreator and Qt 5.7.1 "built in".
- Another Singleton Pattern for QML -or- Multi-threading Pitfalls With Singletons
Aren't singleton objects just the greatest? You can access them from any part of your code, you can use them in QML... Why wouldn't use them in absolutely everything? We'll talk about some nightmare issues related to singleton objects when working with multi-threaded code and a pattern that reduces the risk when using C++ singleton objects in QML. Among topics: * The Singleton Design Pattern * GUI vs Non-GUI threads * Cross-thread function calls * Catching fatal exceptions * Unit tests
- Using QNanoPainter, the OpenGL Library for Qt
Niels Mayer will discuss the QNanoPainter library, which is an open source, OpenGL accelerated C++ vector drawing library for QML applications. QNanoPainter provides a QPainter-like API for drawing complex scenes faster than using a QQuickFramebufferObject or a QQuickPainterItem. It out-performs the new QML Shapes type, but whereas Shapes is only available since Qt 5.10, QNanoPainter can be used with older versions of Qt 5 (works great with Qt 5.6 & Qt 5.9 LTS releases). The presentation will cover where to get QNanoPainter, how to use add it to a project, how to learn about it and will demonstrate apps that use it.
- Test Driven Development with QtTest
Test Driven Development (TDD) is a software development methodology that emphasizes writing code that validates the behavior of functions or classes before writing those functions or classes. It is used in industries concerned with minimizing defects such as security software and financial tools. Presenter Stan Morris used test driven development while working at McAfee on enterprise security systems and Conduent (formerly StrataCare) while working on an automatic worker's compensation bill review engine. The discussion will cover unit testing Qt source code using the QtTest framework and a light introduction into test driven development using Qt Creator. Please bring $5 to cover the cost of food. Please post food preferences... snacks or meal?
- Workflow for Qt App UX Design
The Qt Framework is excellent for creating world-class, intuitive, interactive user interfaces. Join us on Wednesday, November 15 as Chris Hill demonstrates a workflow for designing an engaging, interactive UX design from sketches, to wireframes to implemenation.
- Qt Company Presentation
Yes, it's today! Right on the heels of the Qt World Summit in Berlin, the next major Qt Conference is... at Promenade Software tomorrow! John Spears and Matt Zanardi from the Qt Company will discuss the Qt Roadmap and the Qt licensing. Te Qt Roadmap discussion will touch on Qt's history and focus on new foundational features in Qt 5.9 LTS (Long Term Support) and their significance towards the future. The Qt licensing discussion will clarify the various licensing options and their value. The Qt Company is sponsoring refreshments for this meeting!
- General Qt Discussion
We do not have a presentation scheduled for this coming Tuesday, but if you would like to get together and discuss Qt, Qt libraries, this meetup, local Qt job opening, please RSVP. If we have 3+ people RSVP, we'll have pizza. If you RSVP, place your request for either: Cheese, Pepperoni, Meat Lovers, Combo or Veggie. The first two RSVPers will determine the two halves of the pizza! I would like to discuss how we can make the meetup more useful to our members. For example, should we use a dedicated Slack channel for quick questions? We have a great deal of technical skill among our members -- do we have members who would like to be available as technical resources?
- Efficient models for QML: QAbstractListModel & QSyncable / QQmlObjectListModel
We start the meeting earlier next time; 6:30 PM at Promenade on the 2nd Tuesday of August. Join us to explore the QAbstractListModel class and the powerful QSyncable class for providing lists of data to QML. QAbstractListModel is a subclass of the QAbstractItemModel with a few minor changes for handling list data instead of tree data. It allows inserting, removing and modifying list elements while only updating affected QML elements -- not the entire list. The QSyncable class is an open source project which wraps QAbstractItemModel and manages the QAbstractItemModel remove, insert and move operations for data changes. It too supports efficient QML view updating. Both Stan Morris and Niels Mayer will present.
- Profiling Qt/QML using Qt Creator
Now meeting on 2nd Tuesday of the month! Qt Creator's profiling tools have improved tremendously over the last year. We'll look at how to use the tool to evaluate performance of QML and C++ code. BTW, Tuesday! Not Wednesday.