2013/04/18

VCでQtとBoost

2008は2年古いので2010に変えてみた。(2010も3年古いが・・)
VC++2010Expressで Boostライブラリを使えるようにする方法 と
VC++2010Expressで Qt(キュート)を使えるようにする方法を書き留めます
内容はQtBoostを参考に、ヴァージョンアップで変わったとこがあるので一応書いておきます。

Boost ! ! ! !

http://www4415ui.sakura.ne.jp/blog/?p=409
Boostのインストールはもっと簡単になってます。上記サイトを見ればすぐわかります。


Boost!は公式からZipでダウンロード。
C:/Program Files/boost/boost_1_47_0に入れた。
VC++2010用のライブラリファイルを作ります。
スタートメニューに「Visual Studio 2010コマンドプロンプト」があるので起動します。
Zipで落とすと普通にbjamが含まれてるはずなので、「bjam.exe --toolset=msvc-10.0 --prefix=c:/tmp --build-type=complete link=static release install」と打った(--toolsetと--prefixは少し変えた)。
リリース用ライブラリだけだったので+「variant=debug,release stage」を追加してみた。
すると c:/tmp にフォルダが2つ?くらい出来たので「C:/Program Files/boost/boost_1_47_0」にコピー(移動)した。 (後半はこっちが役に立った)
VC++2010 の、「VC++ディレクトリ」を変更しますが、ソリューションごとに設定するので最後に書きます。

Qt ! ! ! !

QtはQtSDKとは違います。
公式より「Qt 4.7.4 for Windows(VS 2008, 228 MB)」をDL、インストールしました。
ちょっと迷いますが標準の「C:/Qt4.7.4」へインストールしました。 ライブラリを使えるようにするため、コンパイルが要ります。
先ず環境コンパイルだそうです。
スタートメニューに「Visual Studio 2010コマンドプロンプト」があるので起動します。
C:/Qt4.7.4に移動し、
 set QMAKESPEC=win32-msvc2010 configure -debug-and-release -D _CRT_SECURE_NO_WARNINGS
と打ちます。
何か聞かれるので
o
と打ちます(OpenSource版の意味)
何か聞かれるので
y
と打ちます(許諾しますの意味)。

次に、ライブラリコンパイルだそうです。 同じ場所で、 nmake と打ちます。時間かかります。 それが終ったら環境変数を設定します。
QMAKESPEC : win32-msvc2010 PATH : %path%;C:/Qt4.7.4/bin;C:/Qt4.7.4/lib でサンプルなどが動くようになります。

Qt及びBoostを使うプロジェクトの作り方

先ずVC++2010でQtのプロジェクトを作ります。
新規プロジェクトで全般よりメイクプロジェクトを選択。
ちゃんとした設定は後でやるのでビルドコマンドに「a」とか「b」とか入れます(空欄だと変になる)。

そのプロジェクトのプロパティを開き、「構成プロパティ」の(Debug用の)「ビルドコマンドライン」に qmake -project qmake nmake debug と3行入れます。  
リリース用ビルド設定は最後のdebugをreleaseに変えます(nmakeだけだとビルドしません)。 
出力にはファイル名の前に「$(ConfigurationName)」を加えます(環境があってないと思うので調節が要ります)。
クリーンは「nmake debug-clean」と入れます。 「VC++ディレクトリ」の設定をします。
ソリューションのプロパティの何処かに「VC++ディレクトリ」があります。 「ディレクトリを表示するプロジェクト」から「インクルードファイル」を選び、追加作成で「C:/Qt/4.7.4/include」と、「C:/Program Files/boost/boost_1_47_0」を加えます。 「ディレクトリを表示するプロジェクト」から「ライブラリファイル」を選び、追加作成で「C:/Qt/4.7.4/lib」と、「C:Program Files/boost/boost_1_47_0lib」を加えます。
これでQtとBoostを使ったプログラムのコンパイル、実行が出来るようになります。
-- Main.cpp --
#include <iostream>
#include <string>
#include <QtGui/QApplication>
#include <QtGui/QMainWindow>
#include <boost/shared_ptr.hpp>

typedef boost::shared_ptr<QString> QStringPtr;

int main(int argc, char *argv[])
{
 QStringPtr str ;
 str.reset( new QString( "hello world"));
 QApplication application( argc, argv);
 QMainWindow  mainWindow;

 mainWindow.setWindowTitle( *str.get() );
 mainWindow.resize( 300, 200); 
 mainWindow.show();
 return application.exec(); 
}