memo

プログラミング備忘録

【Qt】画面を複数作成する

やりたいこと

ボタンを押したら、新しい画面が出てくるようにしたい。

 

Pikaクラスで作った画面のボタンを押すと、Raiクラスの画面が表示できたらいいなと思いながら作っていきます。

 

 

ボタンを作成

pika.uiクリック、左側のpush buttonを画面に引っ張ってきます。

適当な大きさに調整し、button上で右クリックすると「スロットへ移動...」という項目があるので進めます。

f:id:shinopikapi:20180513162122p:plain

 

clicked()の項目をクリックすると、自動でpika.cppに関数が作られました。

void Pika::on_pushButton_clicked()

が作成されたので、ボタンを押したときの動作をここに書いていきます。

 

新しいクラスの作成

別画面を作成するとき、クラスわけなくとも普通に作成できるのかもしれませんが、

私は何となく別にしたいので新しいクラスを作ります。

 

プロジェクト名(今回はTestにしています)の上で右クリックすると、「新しいファイルを追加...」と出てくるのでクリックします。

f:id:shinopikapi:20180513162753p:plain

フォームを表示したいので、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();

 

ビルド、実行

以下のような感じになります。

f:id:shinopikapi:20180513170713p:plain

ちゃんと2画面表示できました。

 

見づらいですが、Pikaの方のmenu1ボタンを押すとライライっの画面が表示します。

右上×ボタンでも消えますが、ライライっ画面の右下closeボタンを押すと消えます。

 

Pikaのコンストラクタで、Raiをnewするときに自分を親に設定しているので、

2画面表示しているときにPikaの方を閉じると、Raiの方も消えました。

 

この関数動いてるのか?と思ったので、一応

qDebug("test");

のように入れておくと、Qtのアプリケーション出力のところで「test」と表示したので確認するときに使えるなあと思いました。

 

 

試しに画面作るより、ブログ書くほうが時間がかかったぴかちゅうでした。

(段落下げがわからない……)