【Qt】画面を複数作成する
やりたいこと
ボタンを押したら、新しい画面が出てくるようにしたい。
Pikaクラスで作った画面のボタンを押すと、Raiクラスの画面が表示できたらいいなと思いながら作っていきます。
ボタンを作成
pika.uiクリック、左側のpush buttonを画面に引っ張ってきます。
適当な大きさに調整し、button上で右クリックすると「スロットへ移動...」という項目があるので進めます。
clicked()の項目をクリックすると、自動でpika.cppに関数が作られました。
void Pika::on_pushButton_clicked()
が作成されたので、ボタンを押したときの動作をここに書いていきます。
新しいクラスの作成
別画面を作成するとき、クラスわけなくとも普通に作成できるのかもしれませんが、
私は何となく別にしたいので新しいクラスを作ります。
プロジェクト名(今回はTestにしています)の上で右クリックすると、「新しいファイルを追加...」と出てくるのでクリックします。
フォームを表示したいので、Qt Designer フォームクラスを選択します。
新しいクラス名 Rai、ファイル名 rai.cpp rai.uiにしました。
ボタンを押したときの動作
PikaクラスのコンストラクタでRaiをnewします。
親は自分(Pika)
ボタンを押したら、show()でrai.uiを表示させます。
# pika.h
private:
Rai *jumpRai;
# pika.cpp
コンストラクタ
jumpRai = new Rai(this);
デストラクタ
delete jumpRai;
on_pushButton_clicked()
jumpRai->show();
色々端折りましたが、とりあえず飛ぶはず。
close()する
ついでに、rai.uiの方にもボタンをつけて、ボタンを押したらclose()させてみたいと思います。
Pikaと同様、ui画面に移動してpush buttonを作成します。
スロットに移動...からclicked()を選択して関数を作成します。
Pikaと同様、on_pushButton_clicked()関数ができました。
ボタンを押したら自分を閉じたいので、以下のように追記します。
this->close();
ビルド、実行
以下のような感じになります。
ちゃんと2画面表示できました。
見づらいですが、Pikaの方のmenu1ボタンを押すとライライっの画面が表示します。
右上×ボタンでも消えますが、ライライっ画面の右下closeボタンを押すと消えます。
Pikaのコンストラクタで、Raiをnewするときに自分を親に設定しているので、
2画面表示しているときにPikaの方を閉じると、Raiの方も消えました。
この関数動いてるのか?と思ったので、一応
qDebug("test");
のように入れておくと、Qtのアプリケーション出力のところで「test」と表示したので確認するときに使えるなあと思いました。
試しに画面作るより、ブログ書くほうが時間がかかったぴかちゅうでした。
(段落下げがわからない……)