hakeの日記

Windows環境でプログラミングの勉強をしています。

メニューをつくる

Ruby/Qteの勉強 その11

メニューバーを作ってみる。構成は

  • 「ファイル」メニューの下に「ファイル1」「終了」の2項目
  • 「表示」メニューの下に「表示1」「表示2」の2項目

を作成。

それぞれのメニューは、QPopupMenuクラスを使用

@filemenu = QPopupMenu.new(self)   #ファイルメニュー作成
@filemenu.insertItem(tr("ファイル1"), self, "file1")
@filemenu.insertItem(tr("終了"), self, "close()", CTRL+Key_Q)

の用に記述を行う、selfの次の引数はメニューが選択されたときに呼ぶメソッド、その次はショートカットキーの割り当てになる、ショートカットは無くても良い。ここでclos()はウィンドウを閉じる(終了させる)メソッド(だと思う)
メニューバーは、QPEMenuBarクラスを使用して各メニューの登録は

menuBar = QPEMenuBar.new(self)
menuBar.insertItem(tr("ファイル(&F)"), @filemenu)
menuBar.insertItem(tr("表示(&D)"), @dispmenu)

のようにする。(&F)は[Menu]キーでメニュー表示させた状態でそのキーを押すと、対応するメニューを表示する。
一時的にメニュー項目をマスクさせたい場合は

@fm2 = @filemenu.insertItem(tr("終了"), self, "close()", CTRL+Key_Q)
@filemenu.setItemEnabled(@fm2, false)

のようにする。

#!/usr/bin/env ruby

require "qte"
require "qpe"
include Qte
include Qpe


class SampleWindow < QMainWindow
   def initialize()
      super()
      setCaption(tr("サンプル"))
      msg = QLabel.new(tr("これはサンプルプログラム"),self)
      msg.setGeometry(10,20,300,30)

      @filemenu = QPopupMenu.new(self)   #ファイルメニュー作成
      @filemenu.insertItem(tr("ファイル1"), self, "file1")
      @filemenu.insertItem(tr("終了"), self, "close()", CTRL+Key_Q)

      # 終了をマスクさせたい場合
#      @fm2 = @filemenu.insertItem(tr("終了"), self, "close()", CTRL+Key_Q)
#      @filemenu.setItemEnabled(@fm2, false)

      @dispmenu = QPopupMenu.new(self)   #表示メニュー作成
      @dispmenu.insertItem(tr("表示1"), self, "disp1", CTRL+Key_A)
      @dispmenu.insertItem(tr("表示2"), self, "disp2", CTRL+Key_B)


      menuBar = QPEMenuBar.new(self)
      #ファイル,表示をメニューバーに登録
      menuBar.insertItem(tr("ファイル(&F)"), @filemenu)
      menuBar.insertItem(tr("表示(&D)"), @dispmenu)

      @ebox1 = QMultiLineEdit.new(self)
      @ebox1.setGeometry(0,280,635,120)
   end

   def file1
      @ebox1.insertLine(tr("ファイル1が選択されました"))
   end

   def disp1
      @ebox1.insertLine(tr("表示1が選択されました"))
   end

   def disp2
      @ebox1.insertLine(tr("表示2が選択されました"))
   end

end

$defaultCodec = QTextCodec.codecForName("utf8")
app = QPEApplication.new([$0]+ARGV)
app.setDefaultCodec($defaultCodec)
QApplication.setFont(QFont.new("lcfont",18))
app.showMainWidget(SampleWindow.new)
app.exec