Qt: メインウィンドウ

このページは現在作成途中です。

Qt creatorでメインウィンドウを作成すると、メニュー、ステータスバーが自動的に含まれるようになっていますが、
ツールバーは作成されません。

メニュー

メニュー追加

“&”の直後の文字がニモニックとして使用されます。

上の図の”File”はQMenuクラス、”Open”はQActionクラスになります。
“Open”の右側のアイコンをクリックするとサブメニューを入力できるようになります。
サブメニューを入力すると、その親メニューはQMenuクラスに変更されます。

追加されたアクションは、右下のアクションエディタに表示されます。

アクションエディタ

ツールバー

リソースファイルを作成する場合は結構手間です。

ツールバーのアイコン(24X24のpngが標準らしい?)を作成したとします。

リソースファイルを作成

右下のウィンドウのタブから「リソースブラウザ」タブを開き、鉛筆ボタンを押します。

リソースブラウザ

左下の「新規作成」ボタンを押し、リソースファイル(.qrc)を作成します。

リソース編集ダイアログ

作成したら、中央下の「プレフィックスを追加」ボタンを押します。

プレフィックスを追加

適当な名称のプレフィックスを追加したら、その隣の「ファイルを追加」ボタンを押し、作成したアイコンを追加します。

ファイルを追加

追加すると以下のように表示されます。

追加後

アイコンリソースを登録したら、次にアクションエディタを表示し、アクションにアイコンを割り当てます。

すでに作成されたアクションに割り当てる場合はそのアクションをダブルクリックします。新規作成する場合は「新規」ボタンを押します。

どちらも選択すると似たようなダイアログ画表示されます。このダイアログの中央右側の「▼」を押し、メニューから「リソースを選択」を選択します。

リソースを選択

リソースを作成しない場合は、ここで「ファイルを選択」を選択してアイコンファイルを割り当てることもできます。

リソースから選択する場合は、以下のダイアログが表示されるので、アイコンを選択して【OK】ボタンを押します。

リソースを選択

アクションエディタで、アクションの左側にアイコンが追加されたのを確認します。

アクションにアイコンが割り当てられる

続いて、メインウィンドウにツールバーを追加します。
ツールバーの追加は、左側のウィジェットボックスからではなく、デザイン中のウィンドウ上を右クリックして表示されるポップアップメニューから、
「ツールバーを追加」メニューを選択します。

ツールバーを追加

ツールバーを追加したら、アクションエディタからアクションをドラッグしてツールバーへドロップします。

ツールバーへアクションをドラッグ

図のようにツールボタンが追加されます。

ツールボタンが追加される

アクションに対応するシグナル/スロットを作成

普通はメニューやツールバーに対応する独自のスロットを用意したいはずですが、
Qtデザイナのシグナル/スロットエディタにはどうもスロットの新規作成機能はなさそうです。

独自のスロットを追加するには、まずデザイン中のウィンドウを右クリックして表示されるポップアップメニューから「シグナル/スロットを変更」を選択します。

シグナル/スロットを変更

選択すると、右クリックしたウィンドウ(この場合はMainWindow)に現在用意されているシグナルとスロットの一覧が表示されます。
スロットを追加するには、スロット一覧の下にある「+」ボタンを押します。

スロットを追加

新規にスロットが作成されるので、適当な名前を入力して【OK】を押します。

スロットを追加したところ

スロットを作成したら、アクションにスロットを割り当てます。シグナル/スロットエディタで【+】ボタンを押します。

シグナル/スロットエディタ

追加すると以下のようにシグナル/スロットの組が追加されますので、それぞれ選択していきます。

発信者は先ほど追加したアクション、シグナルはtriggered()
受信者はMainWindow、スロットに先ほど作成したスロットを、それぞれドロップダウンメニューから選択します。

シグナル/スロットを設定

以上でメニュー、ツールバーに対する設定は完了です。あとは作成したスロットの中身を埋めていきます。

ステータスバー

ステータスバーにテキストを表示するには以下のようにします。

		statusbar->showMessage( tr(" ahoka ... ") );

定番の、プログレスバーをステータスバーに表示する方法は以下のようにします。

	QProgressBar bar;
	statusbar->addWidget( &bar );

	bar.setMinimum( 0 );
	bar.setMaximum( 100 );
	for ( int i = 0; i < 100; i++ )
	{
		bar.setValue( i );
		// 何か処理
	}

	statusbar->removeWidget( &bar );
アーカイブ