ポップアップメニュー
Ruby/Qteの勉強 その33
画面をタップして、その位置にメニューをポップアップさせる。
メニューの項目はQPopupMenuのオブジェクトにinsertItemさせることで作成する、メニュー表示はexecメソッドを使用。
画面タップの検出とその位置取得にはmousePressEventを使用する。取得したタップ位置はそのままQPointのオブジェクトに設定してexecメソッドに渡す。
ただしQLabel部分をタップしてもメニューが表示されない、ここはQLabel自体のmousePressEventを細工する必要あり?
#!/usr/bin/env ruby require "qte" require "qpe" include Qte include Qpe class SampleWindow < QMainWindow def initialize() super() setCaption(tr("サンプル")) @mes = QLabel.new(tr("画面をタップするとメニュー表示"), self) @mes.setGeometry(0, 0, 320, 35) @menu = QPopupMenu.new @menu.insertItem(tr("項目1"), self, 'dummy') @menu.insertItem(tr("項目2"), self, 'dummy') @p = QPoint.new(0, 0) catchEvent end # タップ検出 def mousePressEvent(e) # タップ位置@pに設定する @p.setX(e.x) @p.setY(e.y) # ポップアップメニューをタップ位置に表示 @menu.exec(@p) end # ダミーメソッド def dummy 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