How to breathe new QML life into a QWidget-based app from 2000s

Presented by Vasily Pereverzev, MuseScore

Abstract

This session will highlight the main pitfalls faced when migrating a classic QWidget-based desktop application and its solutions.

Using the example of our experience in transitioning the MuseScore software, I’ll describe the challenges faced when transforming a design from the 2000s to QtQuick. We’ll also discuss effective strategies for migrating from QWidgets on QML, and cover limitations faced with mixing both systems in a single app and approaches to overcome or even avoid them entirely.

Vasily Pereverzev

My name is Vasily Pereverzev, I’m the Engineering Team-Lead for the MuseScore composition software. Previously, I lead a team of more than 15 people focused on developing mobile applications and experiences using the Qt platform. For the past 6 years, I have been completely absorbed in working with Qt, becoming an especially BIG fan of QML.

Slides

View the slides for this presentation here…

Video

One comment on “How to breathe new QML life into a QWidget-based app from 2000s

  1. Good talk! I took a very similar approach with Shotcut. We use QWidgets MainWindow and DockWidgets for mainly for the app “shell” and QML views inside each dock with some legacy exceptions. I had made the decision from the beginning to use QML Quick as the main canvas API and Quick Controls for most things that are extensible and need a quick & simple mainly form-like UI. For example, our all of our filters but also toolbars and menus within docks. Unfortunately, we were an early adopter of Quick Controls and now have much work to do converting to Quick Controls 2. We do not concern ourselves with focus navigation across the entire UI. In a complex application like this, I think focus navigation is only useful within small contexts (e.g. the previously mentioned filter settings). Maybe in the future we will abandon the DockWidgets and go with a simpler Splitter-based sidebars design.

Leave a Reply

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