Hatena::ブログ(Diary)

はけの徒然日記 このページをアンテナに追加 RSSフィード

2005 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 04 | 05 | 08 | 09 | 10 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 |
2011 | 01 | 02 | 03 | 04 | 11 | 12 |
2012 | 02 | 03 | 05 |
2014 | 02 | 03 | 04 | 05 | 12 |
2015 | 05 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 04 | 05 | 08 | 09 | 11 | 12 |
2017 | 01 | 02 | 03 | 04 |

2005-10-19(Wed)

ポップアップメニュー

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

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/hake/20051019/p2