Now that Qt 5.11 is released, it is finally time to upgrade the last Qt 1.0 applications out there… No, not really. I want to take a look at how well we have kept compatibility in Qt over the years since the first official release.
Qt guarantees source and binary compatibility between minor releases, and we take that seriously. Making sure that you don’t have to rewrite (or even recompile) your application when you upgrade to a newer version of Qt is important to us. However, there are times when we need to make bigger changes in order to keep Qt up to date. This is done in major releases. Since the release of Qt 1.0 in 1996 (almost twenty-two years ago), we have broken source compatibility four times: in 2.0, 3.0, 4.0 (some of you may remember that as a painful transition), and 5.0.
We do try to keep breakages to a minimum, even in the major releases, but the changes do add up. This raises the question: How hard would it be to port a Qt application from Qt 1.0 to 5.11?
Not only an interesting look at Qt history, but also a look back on mid 90s C++, and what has and hasn’t changed.
This is a really neat, clear article. It’s impressive how right Qt got its API two decades ago.
Still, the overriding impression I got was that the Qt API has, quite reasonably, changed a fair bit, albeit incrementally, whereas that’s not been driven by changes in C++. Namespaces seemed to be the only case. That’s probably not surprising given that C++ changes are (almost entirely?) backwards compatible.
When did signals and slots come in? Right at the beginning? The article’s example program avoids it, but I don’t think it should be overwhelmingly difficult, since Qt 5 supports lambdas and member function pointers directly.
According to KDE 1.0, they were already part of Qt 1.0.
I never understood the problem.
On those days Borland, Zortech and Microsoft had similar extensions and Windows devs were fine with them.
Which problem? There were many problems they were trying to solve with signals and slots. Maybe too many.
The complaint about language extensions.
As I said, it was normal in Windows C++ compilers, already on 16 bit days.
I’m not getting you. There were no cross platform signal/slot libraries back then, and there aren’t any that have gained significant traction now. Their code generator extensions weren’t just about signals and slots, but also for their style of reflection.