QT変数は、Qtモジュールをプロジェクトに含めるために使用されます。openglを追加すると、OpenGL(およびそれにリンク)を使用するQtコードを含むQtOpenGLモジュールが追加されます。「インクルード」とはリンクを意味する場合、QtのOpenGLモジュール(libQtOpenGL.so)がさまざまなOpenGLライブラリをリンクします。また、QtモジュールにはQt OpenGLモジュールのヘッダーが含まれ、QtOpenGLモジュールにはOpenGLヘッダーが含まれます。
OpenGLヘッダーとOpenGLライブラリは、OSがそれらを保持している場所ならどこにでもあります。プロジェクトは、プラットフォームのQt mkspecsが何であれ、それらがどこにあるかを認識しています。mkspecsには、インクルードパスとリンクパスがすでに含まれています。
たとえば、今私はMac OS Xを使用しており、Qtmkspecsは/usr/local/Qt4.8/mkspecsにインストールされています。ここにすべてのプラットフォームの説明があります。共通して、私のプラットフォームの説明の一部であるmac.confを見つけることができます。その中にあなたは見ることができます:
QMAKE_INCDIR_OPENGL = /System/Library/Frameworks/OpenGL.framework/Headers \
/System/Library/Frameworks/AGL.framework/Headers/
この情報は、Qt Creator(qmake)が任意のアプリケーションのMakefileを作成するように求められたときに使用されます。このようにして、アプリケーションはOpenGLのヘッダーの場所を認識します。プロジェクトは、openglモジュールを追加した場合にのみ、それをインクルードパスに自動的に追加します。
別の例として、これはLinuxプラットフォームの定義の一部です。
...
QMAKE_INCDIR =
QMAKE_LIBDIR =
QMAKE_INCDIR_X11 = /usr/X11R6/include
QMAKE_LIBDIR_X11 = /usr/X11R6/lib
QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS]
QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS]
QMAKE_INCDIR_OPENGL = /usr/X11R6/include
QMAKE_LIBDIR_OPENGL = /usr/X11R6/lib
QMAKE_INCDIR_OPENGL_ES1 = $$QMAKE_INCDIR_OPENGL
QMAKE_LIBDIR_OPENGL_ES1 = $$QMAKE_LIBDIR_OPENGL
QMAKE_INCDIR_OPENGL_ES2 = $$QMAKE_INCDIR_OPENGL
QMAKE_LIBDIR_OPENGL_ES2 = $$QMAKE_LIBDIR_OPENGL
QMAKE_INCDIR_EGL =
QMAKE_LIBDIR_EGL =
QMAKE_INCDIR_OPENVG =
QMAKE_LIBDIR_OPENVG =
...
これが何を意味するのか、あなた自身で理解できると思います;-)
質問に答えるには、OpenGLライブラリへのインクルードパスとリンクパスが、システムのどこかにあるmkspecファイルに格納されている情報を取得してアプリケーション用にqmakeが生成するMakefileに含まれます。実際のOpenGLヘッダーとライブラリは、システムのデフォルトの場所にあり、これはQt自体とは何の関係もありません。OpenGLライブラリを直接使用する場合(または必要ない場合もあります)、ソースコードにヘッダーを含める必要がある場合がありますが、インクルードパスはすでにmkspecファイルによって提供されている必要があります。
編集:openglモジュールを追加すると自動的に何が起こるかを見てください:これは、QtCreatorがopenglモジュールなしでC++ファイルをコンパイルするために使用するコマンドラインです(Macの場合):
g++ -c -pipe -g -gdwarf-2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -Wall -W -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Qt4.8/mkspecs/macx-g++ -I../TextEdit -I/Library/Frameworks/QtCore.framework/Versions/4/Headers -I/usr/include/QtCore -I/Library/Frameworks/QtGui.framework/Versions/4/Headers -I/usr/include/QtGui -I/usr/include -I. -I. -I../TextEdit -I. -F/Library/Frameworks -o main.o ../TextEdit/main.cpp
これは、追加後に発生することです。
g++ -c -pipe -g -gdwarf-2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -Wall -W -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Qt4.8/mkspecs/macx-g++ -I../TextEdit -I/Library/Frameworks/QtCore.framework/Versions/4/Headers -I/usr/include/QtCore -I/Library/Frameworks/QtGui.framework/Versions/4/Headers -I/usr/include/QtGui -I/Library/Frameworks/QtOpenGL.framework/Versions/4/Headers -I/usr/include/QtOpenGL -I/usr/include -I/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/System/Library/Frameworks/AGL.framework/Headers -I. -I. -I../TextEdit -I. -F/Library/Frameworks -o main.o ../TextEdit/main.cpp
プロジェクトは、OpenGLヘッダーを探す場所を教えられています。