2009/05/28(木)16:49
【Qt】恩返しのつもりで...(・∀・) (その2)
いつものような記事だと思って読み始めた方、ごめんなさい、の第2弾です。
同じように"Qt"が何か分かる人以外は読みとばしてくださいませ...。
*・゜゚・*:.。..。.:*・゜(*´▽`*)゚・*:.。. .。.:*・゜゚・
実はもうひとつハマっていたことがあって、こちらもググっても解決方法は出てきませんでした。
同じようにハマっている人は何人かいたみたいですが...。
前回ビルドした「Qt/MFC Migration Framework 」を使って、Win32APIとQtを混在させて記述する方法がここにあります。
"QWinWidget"と言うクラスでブリッジさせるのですが、このまま同じように書いてもリンクが通りません。
(1) VisualStudioでプロジェクトを作る
(2) 上記URLを参考に、コードを追加
(3) ライブラリとかパスとかを追加
(4) ビルド
本当はこれでウィンドウにいくつかウィジェット(コントロール)が表示されたウィンドウが出てくるはず何ですが、リンクエラーが出ます。
error LNK2001: 外部シンボル ""public: static struct QMetaObject const QWinWidget::staticMetaObject".....
_, ._
(;゚ Д゚) …?!
全くもって意味不明です。
"staticMetaObjectが無い"ってのは分かるんですが、何で無いの?
何のキーワードで検索したのか忘れましたが、いろいろググっていたら、Googleのブック検索で、オライリーの「入門Qt4プログラミング」と言う本がヒットしました。
全部じゃ無いけど中が見えるのは便利ですね。
その中の22ページにちょっとしたヒントがありました。
"Q_OBJECTマクロ"、"moc"、何かこの辺の影響で同じようなリンクエラーが出る、と。
そのときはqmakeしなおしてmakeファイルを再生成してね、と。
_, ._
(;゚ Д゚) …?!
VisualStudioのプロジェクトなんでmakeファイルは無いんすよね。
要はmocファイル内部に出来るはずの関数が足りなくてリンクエラー?
ん? mocファイルがいるってことかい?
そこで前回のブログでも使用した"moc_qwinwidget.cpp"をプロジェクトに追加してビルドしてみました。
キタ━━━━━━(゚∀゚)━━━━━━!!!!!
ビンゴです。
プロジェクトの設定でプリコンパイルをoffにするのとmocファイル内のヘッダのパスを変更する必要がありましたが、あっさりうまくいったときは涙モンでした。
しかしQt的にはWin32APIとの混在はサポート外らしいですね。
つまり、Qtってのは全部QtのAPIで記述しないといけない、と。
まあクロスプラットフォームな開発ツールなんで当たり前と言えば当たり前なんですけどね。