2009-09-02 3 views
10

私は最近Qtを探し始めました(Qt 4.5.2をインストールし、「qt integration v1.5.2」というEclipse-CDTプラグインをインストールしました。私はLinux-Eclipse-CDT-QTintegrationですべての開発を行います)。QtはC++ライブラリとして分類されていますか?ライブラリでない場合、QTをどのように分類しますか?

私はQtがまっすぐなバニラのC++ライブラリだと思っていましたが、Qtのサンプルコードをインストールして起動したときに、私が非標準であると思う多くの「奇妙な」ものが見られました。

私の目標は、抽象度の高いレベルで理解することである。

  • はQtのC++ライブラリとして分類されていますか?
  • ライブラリでなければ、Qt(類推/比喩)がどのように分類されますか?

答えて

30

Qtはライブラリではなくフレームワークです。これはプログラミング言語によって厳密に区別されているのではなく、コードがどのように設計され、使用されるべきかを記述しています:

はあなたのコードで使用される他の誰かのコードです。ライブラリを使用するということは、アプリケーションがそのままの状態にあることを意味します。

フレームワークは、コードが適合する他のコードです。フレームワークを使用することは、フレームワークがアプリケーションの構造を定義することを意味します。

フレームワークを使用している場合は、そのフレームワークの慣習を理解する必要があります。これは基本言語とは多少異なる場合があります。さもなければ、あなたはフレームワークと戦うのに多くの時間を費やすことができ、それは何を提供しなければならないのか分からなくなります。

Qtは、まっすぐなバニラC++のようには見えません。なぜなら、それはまっすぐなバニラC++ではないからです。シグナルやスロットなどの機能を可能にするために、C++のオブジェクトシステムに拡張機能を追加しました。これらの拡張は、C++プリプロセッサとして動作するQtのmocを使用して実装されています。

+0

QTはフレームワークではありません。 GUIの典型的なイベント処理以外の制御フローの逆転はない。 QTは、言語拡張ライブラリです。 – Lothar

+1

IoCはフレームワークの要件ではありません! – MFH

3

Qtは、プリプロセッサとビルドシステムの一部とともに、C++ライブラリのセットです。

+0

+1また、Qtが提供するライブラリからアプリケーション全体を構築できる「開発プラットフォーム」と考えることもできます。 – Shaun

2

ほとんどのGUIフレームワーク/ライブラリはC++はごく最近までなかったではない(あるいはないという理由だけで、言語に追加:C++へのQtの拡張機能の詳細については、 )あなたはGUIのために必要なイベントの種類をネイティブにサポートします。

Qtはこれを言語の拡張で選択し、プリコンパイラ、MFC、wxWidgetsはcマクロとcプリプロセッサでこれを行います。 Qtのアプローチは、もう少し複雑なビルド環境を犠牲にして、より多くのこと(cppマクロ言語に制限されていない)を行うことを意味します。