行くらいになってしまうかもしれません。いうことで、今回からはクラスを使って関数を分割していくことにします。ソースファイルも01.cppとmain.hファイルに分割します。今回作成するプログラムの実行結果は、図4.1,4,2のようになります。テキストに何か文章を書きsetボタンを押すと、ラベルにテキストの内容がコピーされます(図4.2)。このプログラムは次のようなコードとなります。app.exec();}今回のコードはかなり長いですね。main.hファイルのコードから見ていきましょう。3,4行目のコードはC言語やC++を使ってやや規模の大きなプログラムを作ったことのある人なら知っていると思います。この方法はインクルードガードと呼ばれています。知らない方はインターネットや書籍で勉強してみてください。VisualC++などの#pragmaonceと全く同じです。6行目ではQDialogヘッダをインクルードしています。今回はダイアログを作りたいので、このヘッダファイルを使います。8,9,10行目ではQLabel,QPushButton,QLineEditのプロトタイプ宣言です。どにはこのクラスが存在しているよ、ということをコンパイラ側に伝えています。行目のように宣言することでいちいちヘッダファイルへクラスを探しにいく手間が省け、コンパイル時間を短縮することができます。12行目でMainWindowクラスを作成しています。このクラスがメインのダイアログとなります。基本的なダイアログの機能を引き継ぐことができます。よって拡張したい機能だけを自分で付け足せばよいわけです。継承のイメージ図14行目のQ_OBJECTは17行目でslotsを使うためのマクロです。最後にセミコロンが付かない事に注意してください。17行目のprivateslots:はその先のsetLabelText関数がSlotとして呼ばれる事があるという意味です。このようにする事でconnect関数を使ってsetLabelText関数をどこかのSignalと結びつけることができます。他にもSignalとして呼ばれる可能性のある関数にはsignals:としておきます。signals:はprivatesignals:やpublicsignals:にはならない事に注意してください。次に01.cppファイルの説明に入ります。3行目では<QtGui>をインクルードしています。関わる部分のヘッダファイルをすべてインクルードしているのと同じです。したらよいのか分からなくなってしまいます。いった事をいちいち考えなくてもよくなるのでQtGuiはたいへん便利です。7行目ではQDialogのコンストラクタに親へのアドレスを渡しています。parentを0にした場合は、その部品が新しいウィンドウとして表示されます。13行目ではconnect関数を使ってボタンが押されたらsetLabelText関数が呼び出されるようにしています。22行目のsetLabelText関数ではlineEditの内容をlabelにセットしています。以上で説明は終了です。他に部品を追加したりしていろいろ試してみてください。複数のウィンドウを表示したい場合があると思います。いった場合に用いられるのが、モーダルダイアログとモードレスダイアログです。ログはモーダルダイアログが表示されている間は操作をすることができません。モードレスダイアログではそういった制限は特にありません。今回はモーダルダイアログを作っていきたいと思います。完成したプログラムは図4.4~4.6となります。Windows)まず始めに図4.4のウィンドウが表示されます。ShowSecondDialogボタンを押すと図4.5のモーダルダイアログが表示されます。トの文字がセットされます。(図4.6)このプログラムは次のようなソースコードとなります。今回はファイルを5分割してあり、コードも長くなっています。難しくは無いと思います。app.exec();}まず、main.cppですが、これはもう見てわかると思うので説明は省略します。MainDialog.hではメインのダイアログクラスの定義を行っています。showSecondDialog関数が呼び出されるように設定しています。今回新しく出てくるところは、showSecondDialog関数内のコードです。22行目では2つ目のダイアログであるsecondDialog変数を作成しています。引数にthisを渡していますが、これはsecondDialog.cppのコンストラクタの定義を見てわかると思います。MainDialogをsecondDialogの親にするということです。して呼び出すということです。