C++でやっています。
Qtを使ってみたいと思い、挑戦中です。
なにやら面倒くさいので Qtを簡略化するDLLを作成しようとしています。
ですが、Qtそのものを使い切れないとライブラリ化できないので挑戦しています。
// 字数制限のため、リンクにします。
ソースコード
という風にやってみましたが、コンパイルは無事通るのですが なぜか起動できません。
ダブルクリックをしてもウィンドウが表示されません。
ただし起動した後、移動や削除を行おうとすると「使用中のため不可能」といったダイアログが出ます。
Windows のタスクマネージャで見るとその実行ファイルが生きているようです。
バックグラウンドになっているようです。
わかりにくいので
WindowX::CMain::main(...) の中に メッセージボックスを表示して printfデバッグしてみました。
すると上記だと "2" まで出力されますがそれ以降は...ということで多分 メッセージループから抜けていないのが原因だと思います。
これの前は
C++
1class WMainWindow : public QWidget, public ( IMainWindow ){ 2 private: 3 QMainWindow* window_; 4 public: 5 void show( void ){ window_->show(); } 6 7}; 8
みたいにして QMainWindow をコンポジションして 間接的にやっていました。
しかしこの方法だとメッセージ ( WinAPIだと WM_COMMAND 等 ) が発行されないのか、
なかなか動きません。
で調べてみるとQMainWindowを継承して イベントハンドラを実装すればいいということで、質問の最初に出てきたコードでやってみました。
それまではイベント関係以外はうまく行っていたのですが、コンポジションじゃなくて継承のほうだとウィンドウそのものが表示されません。
以前、Q_OBJECTマクロをつけろ。といわれたのですが、
実際に
C++
1class WMainWindow : public ...{ 2 Q_OBJECT 3 public: 4 ... 5}; 6
みたいにするとエラーが出ました。
今外出先で手元にないのでエラーメッセージは忘れましたが、「Q_OBJECTって何?」という感じのエラーだった気がします。
どのようにすればいいのでしょうか。
目標としては
[DLL側とEXE側] IMainWindow等の開示 [DLL側] IMainWindowを実装したWMainWindowオブジェクトを返す [EXE側] 開示されているインターフェースを通して間接的に操作する
です。
[情報]
言語: C++
ライブラリ: Qt 5.6
コンパイラ: MinGW
宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。