サイトマップ
お知らせ、メモ
案内板
うちのヘッドライン
 




トップ  >  プログラム豆知識  >  VC2008豆知識  >  QtアプリケーションをVC2008で作成するには

QtアプリケーションをVC2008で作成するには

このページは現在途中です。

Qtアプリケーションを作成する場合はqmakeを利用するのが普通ですが、 VC2008でもできるようです。 以下の例は、Qtに付属のexampleプロジェクトの設定を参考にした設定例です。 なので、もっと複雑なプロジェクトではこれだけではだめかもしれません。

Qtのコンパイル

まずはVC2008でQtをコンパイルする必要があります。 筆者は以下のサイトを参考にしました。

VC++ 2008 Expressを使ってQtの環境設定とサンプルコンパイル

筆者の場合、途中でいくつか参照エラーが出ましたが、 エラーが出た箇所の"tmp/moc/debug(release)_shared/"以下にあるtmpファイルを削除するととりあえず通ります (よくわかりませんが、、、)。 Qt 4.6.3では直っていました。

ここを参照

データベースのサポート

configureのときにデータベースのドライバをサポートするようにしないと使えないようです。 以下の例はPostgreSQLとODBCをサポートするように指定する例です。

> configure -debug-and-release -D _CRT_SECURE_NO_WARNINGS
	 -qt-sql-psql -I "c:\Progra~1\PostgreSQL\8.4\include" -L "c:\Progra~1\PostgreSQL\8.4\lib" -l libpq -qt-sql-odbc
	 ※パスの指定はスペースが間にあるとダブルクォーテーションで囲ってもだめです
	 ※-lオプションで指定するライブラリは拡張子無しで指定します

筆者の場合は、OSGeo4Wにあるライブラリを使ってデータベースをサポートしようとしたのですが、これだとsqliteのコンパイルがうまくいかないようです。 (OSGeo4Wのsqliteは古いか?) そこでsqliteは自力でビルドし、それを使ってQtのconfigureを行った例が以下のコマンドです sqliteのプロジェクトをC:\lib以下に置いているものとします。

> configure -debug-and-release -D _CRT_SECURE_NO_WARNINGS -qt-sql-odbc -qt-sql-sqlite
	-I "C:\lib\sqlite3\sqlite3" -L "C:\lib\sqlite3\Release" -l sqlite3 -qt-sql-mysql
	-qt-sql-psql -I "C:\OSGeo4W\include" -L "C:\OSGeo4W\lib -l libpq -l libmysql

インクルードパスの指定はビルドしたsqliteのほうを前に指定する必要があります。 そうしないと、OSGeo4Wにあるsqliteのヘッダファイルが優先されてしまい、やはりビルドに失敗します。 上記のコマンドは、Qt 4.7.1でうまくビルドできました。

VC2008でQtプロジェクトを作成

VC2008でQtアプリケーションを作成するには以下のようにします。 まずは空のプロジェクトを作成して、とりあえず空のmainファイルを追加し、プロジェクトの設定を以下のようにします (余計な設定や、本当は設定するべきものが他にもあるかも知れませんが、とりあえずこれでできました)。 プロジェクトの種別は"Windowsアプリケーション"でいいとおもいます。 追加のインクルードやライブラリは、実装する機能に応じて追加する必要があります。

メニューサブメニュー 項目設定値
全般文字セット設定なし
C++全般追加のインクルードディレクトリ Qtインストールディレクトリ\include\QtCore, Qtインストールディレクトリ\include\QtGui, Qtインストールディレクトリ\qt\include, Qtインストールディレクトリ\include\ActiveQt, Qtインストールディレクトリ\mkspecs\win32-msvc2008
プリプロセッサプリプロセッサの定義 _WINDOWS,UNICODE,WIN32,QT_LARGEFILE_SUPPORT,_CRT_SECURE_NO_WARNINGS, QT_DLL,QT_GUI_LIB,QT_CORE_LIB,QT_THREAD_SUPPORT
出力ファイルASMリストの場所$(ConfigurationName)\
オブジェクトファイル名$(ConfigurationName)\
コード生成簡易リビルドいいえ
リンカ全般インポートライブラリの無視はい
追加のライブラリディレクトリQtインストールディレクトリ\lib
入力追加の依存ファイル Qtインストールディレクトリ\lib\qtmain.lib Qtインストールディレクトリ\lib\QtGui4.lib Qtインストールディレクトリ\lib\QtCore4.lib
システムサブシステムWindows
詳細対象コンピュータ設定なし

さらに、Q_OBJECTが定義されているクラスのヘッダファイルには以下のようにカスタムビルドステップを定義します。

項目設定値
コマンドライン Qtインストールディレクトリ\bin\moc.exe -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -D_CRT_SECURE_NO_WARNINGS -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"Qtインストールディレクトリ\include\QtCore" -I"Qtインストールディレクトリ\include\QtGui" -I"Qtインストールディレクトリ\include" -I"Qtインストールディレクトリ\include\ActiveQt" -I"Qtインストールディレクトリ\mkspecs\win32-msvc2008" -D_MSC_VER=1500 -DWIN32 $(InputFileName) -o moc_$(InputName).cpp
出力ファイル moc_$(InputName).cpp
追加の依存ファイル Qtインストールディレクトリ\bin\moc.exe;$(InputFileName)

ここまでできたら、一度ビルドを実行します。 すると、外部参照エラーが出るかと思います。 これは、上記のmocコマンドで作成されるメタオブジェクトのcppがリンクされていないためです。

そこで、プロジェクトに新しく適当なフィルタ(「MOCファイル」など)を作成して、 その中にmocが作成したmoc_***.cppを追加します。 追加したら再度ビルドすると、無事実行ファイルが作成されます。

もしくは、moc画出力するファイルのファイル名で空ファイルを作って先にプロジェクトに追加しておいてもいいでしょう。

UIファイルも追加

同じ要領でUIファイルもプロジェクトに追加して、カスタムビルドツールを指定することで、UIも含めて一度にビルドしてしまうことができます。 MOCと同じようにフィルタを作成してプロジェクトに追加するといいでしょう。

UIファイルのプロパティで、カスタムビルドツールに以下のように指定します。

項目設定値
コマンドライン Qtインストールディレクトリ\bin\uic.exe -o %(Filename).h %(Identity)
出力ファイル %(Filename).h

設定後、一度UIファイルをコンパイルし、できたヘッダファイルをプロジェクトに追加します。

参考


クリエイティブ・コモンズ・ライセンス
This documents by Yamate,N is licensed under a Creative Commons 表示 - 継承 3.0 非移植 License.
login