Qt/Gcc
2.メニュー
画像を読み込むためにメニューをつけます。
2-1
mainwindow.hの実装
mainwindow.hに以下のコードを追加します。
//Guiのためのincludeファイルの追加
#include
<QtGui>//menu
//classの宣言
class QMenu;
メニューに、「New」アイテムをつけます。このため下記のメンバー変数とメンバー関数をインプリメントします。メンバー関数はmainwindow.cppで実装します。
「public slots:」以下の関数はQt独自のシグナルースロットの関数となります。これはVisual
C++のメッセージを送る関数とメッセージを受ける関数ということになります。
private:
//以下追加
QMenu
*fileMenu;//メニューバー追加用。
QAction
*newAct;//Newアイテム追加用。
void
createMenus();//メニューバー作成用のメンバー関数追加用。自分でインプリメント
void
createActions();//Newアイテム作成用のメンバー関数追加用。自分でインプリメント
public
slots://slotsの実装
void
newFile();//スロット関数追加用。自分でインプリメント
2-2 mainwindow.cppの実装
次にmainwindow.cppの処理です。初めにメンバー関数の実装をします。
void
MainWindow::createActions()
{
newAct= new
QAction(tr("&New"),this);//アクションを作成する。名前は「New」とする。
connect(newAct,SIGNAL(triggered()),this,SLOT(newFile()));//アクションに対してシグナルとスロットを定義する。newFile()がスロット関数となる。
}
void
MainWindow::createMenus()
{
fileMenu =
menuBar()->addMenu(tr("&File"));//メニューバーに「File」メニューを追加する
//上記は右のコードでもよい。QMenu *fileMenu =
menuBar()->addMenu(tr("&File"));
fileMenu->addAction(newAct);//メニューにcreateActions関数で作成したアイテムを追加する。
}
上記のメンバー関数の呼び出しは、QMainwindowのコンストラクタで実施します。
以下をコンストラクタに追加します。
createActions();//アクションの作成
createMenus();//メニューの作成
メニューアイテム「New」が選択されて、signal(message)である、newActが発行されます。
その受け側のslot関数を実装します。ここでは、
//newActに対するスロット関数
void
MainWindow::newFile()
{
}
ビルドして実行すると以下の結果になります。
fig 1
Signal –
slotsが動作しているか、確認のためメッセージボックスを表示させる
コードを一時的にインプリメントします。後でコメントアウトしてください。
void
MainWindow::newFile()
{
QMessageBox::information(0,"title","NewFile");
}
実行してFile –
Newを選択するとInfomationダイアログが表示されます。
fig 2 ダイアログ表示