
Stay up to date with the latest marketing, sales and service tips and news.
この記事は The Qt Blog の Porting guide from Qt 1.0 to 5.11 を翻訳したものです。
執筆: Paul Olav Tvete, 2018年05月24日
Qt 5.11 がリリースされました。Qt 1.0 で書かれたアプリケーションをアップグレードする絶好の機会です ;-)。…という冗談はさておき 、今回は我々が最初の公式リリース以降の長い年月の間、いかに Qt の互換性を保ちつづけたのかを見てみたいと思います。
Qt は、ソースコードとバイナリの 互換性をマイナーリリース間で保証 していて、これは真剣に取り組んでいることの一つです。Qt のバージョンが上がった際にいちいち、アプリケーションの修正(や再コンパイル)を必要としないように非常に気を遣っています。しかし、時には Qt の改善にともなう大きな変更が必要な場合もあります。その場合は、メジャーリリースとして行います。1996年の Qt 1.0 のリリース以来(22年も前ですね)、2.0、3.0、4.0(この時はとても大変でしたね)、5.0 と4度ソースコードの互換性を破りました。
もちろん、メジャーリリースで互換性を破る場合でも影響を最小限に留めるよう努めてはいますが、変更は積み重なります。ここで「Qt 1.0 のアプリケーションを 5.11 で動かすのはどのくらい大変なんだろう?」という疑問が浮かび上がります。
この回答として、Qt 1.0 で提供していたチュートリアルのサンプルを題材にして、Qt 5 でコンパイルできるようにすることにしました。Qt のアーカイブは 1.41 までしか遡れないため、4つもの異なるソースコード管理システムに保存された古代の歴史から発掘する必要がありました。少しだけ脱線しましたが、そのサンプルの名前は t14 というもので、チュートリアルの最後、14番目のコードになります。
それでは実際に、これをビルドして実行するために必要なステップを紹介したいと思います。
これが 1996 年に Troll Tech(この時はまだ Trolltech ではありませんでした)が公式に推奨した Qt 1.0 での最先端のプログラムの書き方でした。
また、tmake は非公開だったため、リリース版では Makefile を生成していました。このまったく異なる内部向けと外部向けのビルドシステムの存在は、リリースプロセスをエキサイティングなものにしていました。
"qscrbar.h"
や "qbttngrp.h"
といった素敵な名前を利用する必要がありました。 依存による間接的なインクルードは昔も問題だったんですね。
bool
型を作成する必要があったんだよ。 色んなものをグローバルな名前空間に置くのは控えています。例外は ‘Q’です。’Q’ は私たちのもの。
単純な名前の変更です。
というわけで、チュートリアルのサンプルが動くようになりました。こんなスクリーンショットです。
あー、文字が収まってないものがありますね。このサンプルはほとんどのものが固定の位置とサイズになっていて、1996 年以降フォントのサイズも変わっています。この対応には Qt 1.0 にはなかった(Qt 1.1 ではじめて登場し、2.0 でゼロから書き直された)QLayout を使いましょう。
これで、すべての見た目が整いました。
というわけで、いかがでしたか?チュートリアル14を Qt 1.0 から Qt 5.11 に移植するのはそんなに大変な作業ではありませんでした。多分、この記事を書く方が時間がかかっています。1.0 のAPI のほとんどが、現在のAPIと対応付けができる形で生き残っています。非互換の部分に関しては、ユーザビリティや可読性、安全性のための改善です。
もちろん、今回のは簡単なサンプルを対象にしました。通常の規模のアプリケーションの複数のメジャーバージョンに渡る移植作業はおそらくもっと難易度が高いでしょう。世の中には、Qt のコンサルサービスを提供している会社 がたくさんありますので、ぜひご相談ください。
Stay up to date with the latest marketing, sales and service tips and news.
Download the latest release here: www.qt.io/download.
Qt 5.12 was developed with a strong focus on quality and is a long-term-supported (LTS) release that will be supported for 3 years.
Find webinars, use cases, tutorials, videos & more at resources.qt.io
Check out all our open positions here and follow us on Instagram to see what it's like to be #QtPeople.
Näytä tämä julkaisu Instagramissa.Henkilön Qt (@theqtcompany) jakama julkaisu