Qt + VS2005


VS2005proでのビルド


1. 公式から落としてきて、たとえば E:\external\Qtにインスコしたとする。
 E:\external\Qt\Qt\ の中身以外いらないので削除して、Qtの中身を1つ上の階層に置き、
 E:\external\Qt\ 以下に一式配置にしたとする。

2. MDのところをMTにしておきたい人はしておく

    E:\external\Qt\mkspecs\win32-msvc2005\qmake.conf をテキストエディタで開き

QMAKE_CFLAGS_RELEASE    = -O2 -MT
QMAKE_CFLAGS_DEBUG      = -Zi -MTd

3. コンソール起動してQtのディレクトリまで行く

   プログラムのVSの中にある Visual Studio 2005 コマンドプロンプト を起動し、
     cd E:\external\Qt

4. configure

   おもむろに以下のコマンドを打ち込む 
configure -debug-and-release -nomake demos -no-exceptions  -no-rtti -no-qt3support -no-scripttools -no-openssl -no-webkit -no-phonon -no-style-motif -no-style-cde -no-style-cleanlooks -no-style-plastique -no-sql-sqlite


5. nmake

  なんかひたすらごちゃごちゃ出た後、nmakeすれば?というメッセージがでるので
 nmake
 と打ち込む

6. 途中エラーで止まる

  ので、下記のファイルを削除
E:\external\Qt\src\script\tmp\moc\release_shared\mocinclude.tmp
E:\external\Qt\src\script\tmp\moc\debug_shared\mocinclude.tmp

8. 再びnamke


以上



ついでに、Hello Qt

int main(int argc, char **argv)
 {
    QApplication app(argc, argv);
    QMessageBox("hello world!", "hello Qt", 
        QMessageBox::Information, 0, 0, 0).exec();

    // これ返すとメッセージループへ行く
    // return app.exec();
    return 0;
 }



Qt + DirectX


QtのQWidgetを継承して、DirectXWidget!にする。
windowモードもfullscreenもできて、Qtのイベントシステムなどを使える。
ただし、MDIでは使えないようだ。

ヘッダの重要箇所


    // @override
    void paintEvent(QPaintEvent *paintEvent);

    // @override
    // ↓こいつが最大のポイント。
    QPaintEngine *paintEngine() const { return 0; }

ソースの重要箇所


  ----- コンストラクタ/初期化メソッドなどで実行 ----
        setAttribute(Qt::WA_PaintOnScreen);
        setAttribute(Qt::WA_NoSystemBackground);
        setAttribute(Qt::WA_OpaquePaintEvent);

      ~DirectXのいつもどおりの初期化とかは普通なので略~

      // winId()を渡してデバイス作成!
        HRESULT a = pDirect3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
            winId(), D3DCREATE_HARDWARE_VERTEXPROCESSING,
            &params, &this->pDevice);
    -----------------------------------------

    // とりあえず背景真っ赤にしてみるテスト.
    // オーバライドしたpaintEventとかいうメソッドに書く!
    void DirectXWidget::paintEvent(QPaintEvent *paintEvent)
    {   
        if (!pDevice) return;
        D3DXCOLOR red(1.0f, 0.0f, 0.0f, 1.0f);
        if(updatesEnabled()) {
            pDevice->Clear( 0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, red, 1.0f, 0 );

            if(SUCCEEDED(pDevice->BeginScene()))
            {
                pDevice->EndScene();
            }
            pDevice->Present(NULL, NULL, NULL, NULL);
        }
    }


VSで、MOCでコンパイルした後、ビルドする



下記コマンド(例)で、ビルド前イベントに適当な名前規則を付けたヘッダファイルを moc でコンパイルするように指定

 for %%i in ($(SolutionDir)src\um_project\*_moc.h) do moc.exe %%i -o $(SolutionDir)src\um_project\moc\%%~ni.cpp

これをやると、例えば・・
 ヘッダファイル: hoge_moc.h が、mocでコンパイルされて、hoge_moc.cppが出来上がる。
 出来上がった.cppをプロジェクトに追加してビルドする。
 2回目以降は、既にcppファイルが追加されているので、自動でビルドされるようになる。

他にもっといい方法がないものか・・。DOSコマンド良くわかんね

Comments