SL-C760 Ruby/Qte プログラミング

   逆引き Ruby/Qt を参照してプログラミングしてみます
   Ruby/Qteで動作するように変更を加えています

 1 インストール

     SL-C700 で Ruby を参照に RubyとRuby/Qteをインストールします


 2 実行方法

    1 ファイルを適当なディレクトリに置いてください
    2 ディレクトリに移動し、
      ruby test.rb で実行できます
    3 または、
      chmod +x test.rb で属性を変更し
      ./test.rb で実行できます


 3 Hello world!

    下記の内容にて、test.rbを作成します

     1   #!/usr/bin/env ruby
     2   require "qte"
     3   require "qpe"
     4   include Qte
     5   include Qpe
     6
     7   a = QApplication.new [$0] + ARGV
     8   hello = QLabel.new 'Hello world!', nil
     9   hello.resize 200, 200
    10   hello.setAlignment Qt::AlignCenter
    11
    12   a.setMainWidget hello
    13   hello.show
    14   a.exec

      左の数字は行番号です。プログラムには必要ありません。 



   エラーメッセージ?が出ていますが、動作しているので・・・
   詳しい方、教えてもらえるとうれしいです。
   コマンド解説は後ほどm(__)m

   * 解説(Mobile PRESS ひだかさんの記事から引用あり)

    #!/usr/bin/env ruby
     Rubyスクリプトであることを示す
    #!/usr/bin/env ruby -Ku
     とするとUTF-8で記述されている事を示す(りなざうでは付けるべきですね)

    require "qte"
    require "qpe"
    include Qte
    include Qpe
     Ruby/Qte拡張ライブラリを読み込む

    a = QApplication.new [$0] + ARGV
     a はこのプログラムの QApplication であることを示す

    hello = QLabel.new 'Hello world!', nil
     ウィンドウシステムのコード: Hello world! のラベル作成

    hello.resize 200, 200
     windowのサイズ指定(ピクセル): 幅,高さ
     数字を変更するとサイズが変わるので試してみましょう!

    hello.setAlignment Qt::AlignCenter
     文字の位置を中央に配置
     先頭に#をつけてコメントアウトすると、文字が左に表示される

    a.setMainWidget hello
     メインウィジェットにhelloのコードを指定(日本語が変かも?)

    hello.show
     ウィジェットを見えるようにします

    a.exec
     Ruby が Qt へ制御を移す:メインウィンドウを閉じるとアプリケーションが終了

     * エディタで変更して保存すればプログラムとして動作するので
       (コンパイルの必要が無い)プログラミングの学習には最高です。
       私は、Zeditorで変更してターミナルで動作を確認しました。


 4 Hello world! −FONTを指定

    test.rbの11行目に下記を追加します
    hello.setFont QFont.new('Lcfont', 18, QFont::Bold)
    読みにくかった文字が大きく見やすくなります


 5 Hello world! −文字位置を指定

    test.rbの10行目
    hello.setAlignment Qt::AlignCenter
     ・Center を Left  に変更すると左位置になります


     ・Center を Right に変更すると右位置になります



    Centerだと高さ方向もセンターなのに上になりました。挙動が違うな!


 6 りなざう流に変更

    ひだかさんに確認したところ、りなざう流(標準)を御教授頂いた。
    でベースを変更します。

     1   #!/usr/bin/env ruby -Ku
     2   require 'qte'
     3   require 'qpe'
     4   include Qte
     5   include Qpe
     6
     7   class RQPop < QMainWindow
     8    def initialize
     9      super
    10      # write
    11   end
    12  end
    13
    14  app = QPEApplication.new([$0] + ARGV)
    15  app.shoMainWidget(RQPop.new)
    16  app.exec



    何も無いWindowが表示されます
    640×480サイズになります
    ×をタップするか、Cancelキーを押すと終了します

    これだけは面白くないので1行プログラムを追加>おまけ(^_^)
    10行目を下記のように変更します

    10      QMultiLineEdit.new(self)



    QMultiLineEditについては次で説明します。
    日本語入力>表示ができました。
    Windowを指定してないので小さいし、改行すると悲惨な事に・・・(~_~;)



    BOXが消えてしまって、ボタンをタップしても何も出ない


 7 QVBox + QMultiLineEditクラス

    複数行編集画面を表示させます。
    (本当は、QSingleLineEditクラスを先に説明すべきですね)
    QVBoxクラスにて画面を垂直方向に並べます。

     1   #!/usr/bin/env ruby -Ku
     2   require 'qte'
     3   require 'qpe'
     4   include Qte
     5   include Qpe
     6
     7   class RQYmc < QMainWindow
     8    def initialize
     9      super
    10      v = QVBox.new(self)
    11      setCentralWidget(v)
    12      QMultiLineEdit.new(v)
    13
    14   end
    15  end
    16
    17  app = QPEApplication.new([$0] + ARGV)
    18  app.shoMainWidget(RQYmc.new)
    19  app.exec


   * 解説

     7   class RQYmc < QMainWindow
      RQYmcクラスを宣言

    10      v = QVBox.new(self)
      垂直方向に並べます

    11      setCentralWidget(v)
      CentralWidgetに”v”を指定

    12      QMultiLineEdit.new(v)
      QMultiLineEditを配置します

    スクロールバーも自動で表示されます。
    これで、ファイル操作が加われば簡易エディタになりますね(^_^)

    13行目に QMultiLineEdit.new(v) を入れてみます



    上下に編集画面が並びました。


 8 QHBoxクラス

    QHBoxクラスにて画面を水平方向に並べます。

     1   #!/usr/bin/env ruby -Ku
     2   require 'qte'
     3   require 'qpe'
     4   include Qte
     5   include Qpe
     6
     7   class RQYmc < QMainWindow
     8    def initialize
     9      super
    10      v = QHBox.new(self)
    11      setCentralWidget(v)
    12      QMultiLineEdit.new(v)
    13      QMultiLineEdit.new(v)
    14
    15   end
    16  end
    17
    18  app = QPEApplication.new([$0] + ARGV)
    19  app.shoMainWidget(RQYmc.new)
    20  app.exec



   * 解説

    10      v = QHBox.new(self)
      水平方向に並べます


 9 QLineEditクラス

    QLineEditクラスにて1行編集画面を表示します

     1   #!/usr/bin/env ruby -Ku
     2   require 'qte'
     3   require 'qpe'
     4   include Qte
     5   include Qpe
     6
     7   class RQYmc < QMainWindow
     8    def initialize
     9      super
    10      v = QVBox.new(self)
    11      setCentralWidget(v)
    12      QMultiLineEdit.new(v)
    13      QLineEdit.new(v)
    14
    15   end
    16  end
    17
    18  app = QPEApplication.new([$0] + ARGV)
    19  app.shoMainWidget(RQYmc.new)
    20  app.exec



   * 解説

    13      QLineEdit.new(v)
     QMultiLineEdit.new(v)の次の行に入れる事によって
     下の段に1行編集画面ができました


 10 QPushButtonクラス


    QPushButtonクラスにてプッシュボタンができます

     1   #!/usr/bin/env ruby -Ku
     2   require 'qte'
     3   require 'qpe'
     4   include Qte
     5   include Qpe
     6
     7   class RQYmc < QMainWindow
     8    def initialize
     9      super
    10      v = QVBox.new(self)
    11      setCentralWidget(v)
    12      QMultiLineEdit.new(v)
    13      QPushButton.new("a",v)
    14      QLineEdit.new(v)
    15
    16   end
    17  end
    18
    19  app = QPEApplication.new([$0] + ARGV)
    20  app.shoMainWidget(RQYmc.new)
    21  app.exec

   * 解説

    13      QPushButton.new("a",v)
     ””で囲んだ文字を表示するボタンができました
     ただし、ボタンをタップした時の動作を指定してないので
     何も起きません(^_^)
     ボタンの文字を日本語にする場合は下記のようにします

    13      QPushButton.new(QString::fromUtf8("テスト"),v)

     ただし、UTF8形式で保存してください




 11 setGeometry

    setGeometryにてウィジェットの場所と大きさを指定することができます

     1   #!/usr/bin/env ruby -Ku
     2   require 'qte'
     3   require 'qpe'
     4   include Qte
     5   include Qpe
     6
     7   class RQYmc < QMainWindow
     8    def initialize
     9      super
    10      m = QMultiLineEdit.new(self)
    11      m.setGeometry(0,0,638,250)
    12      p = QPushButton.new(QString::fromUtf8("テスト"),self)
    13      p.setGeometry(0,260,638,30)
    14      i = QMultiLineEdit.new(self)
    15      i.setGeometry(0,300,638,120)
    16   end
    17  end
    18
    19  app = QPEApplication.new([$0] + ARGV)
    20  app.shoMainWidget(RQYmc.new)
    21  app.exec


   * 解説

    11      m.setGeometry(0,0,638,250)
     ( )内の数字ですが 開始座標x,開始座標y,サイズx,サイズy
     サイズxが638なのは、640だと画面からはみ出してしまうからです


 12 QMenuBarクラス

    QMenuBarクラスにてメニューバーを表示します

     1   #!/usr/bin/env ruby -Ku
     2   require 'qte'
     3   require 'qpe'
     4   include Qte
     5   include Qpe
     6
     7   class RQYmc < QMainWindow
     8    def initialize
     9      super
    11      menubar = QMenuBar.new(self)
    12      menubar.setSeparetor(QMenuBar::InWindowsStyle)
    13      popup = QPopupMenu.new(self)
    14      popup.insertItem("&Quit",QPEApplication::qApp,"quit()")
    15      menubar.insertItem("&File",popup)
    16      m = QMultiLineEdit.new(self)
    17      m.setGeometry(0,30,638,250)
    18      p = QPushButton.new(QString::fromUtf8("テスト"),self)
    19      p.setGeometry(0,290,638,30)
    20      i = QMultiLineEdit.new(self)
    21      i.setGeometry(0,330,638,90)
    22   end
    23  end
    24
    25  app = QPEApplication.new([$0] + ARGV)
    26  app.shoMainWidget(RQYmc.new)
    27  app.exec


   * 解説

    11      menubar = QMenuBar.new(self)
    12      menubar.setSeparetor(QMenuBar::InWindowsStyle)
     メニューバーをWindowsスタイルで設定します
    13      popup = QPopupMenu.new(self)
     ポップアップメニューを作成します
    14      popup.insertItem("&Quit",QPEApplication::qApp,"quit()")
     QuitをタップするとQPEApplication::qAppの"quit()"を呼んで終了します
    15      menubar.insertItem("&File",popup) 

 13 QToolBarクラス

    QToolBarクラスにてツールバーを表示します

     1   #!/usr/bin/env ruby -Ku
     2   require 'qte'
     3   require 'qpe'
     4   include Qte
     5   include Qpe
     6
     7   if $PIXDIR.nil?
     8    $PIXDIR = ".//"
     9   end
    10  
    11  class RQYmc < QMainWindow
    12    def initialize
    13      super
    14      menubar = QMenuBar.new(self)
    15      menubar.setSeparetor(QMenuBar::InWindowsStyle)
    16      popup = QPopupMenu.new(self)
    17      popup.insertItem("&Quit",QPEApplication::qApp,"quit()")
    18      menubar.insertItem("&File",popup)
    19
    20      @openIcon = QPixmap.new($PIXDIR + "fileopen.xpm")
    21      @toolbar = QToolBar.new(self,"file operations")
    22      @toolbar.setGeometry(0,30,638,30)
    23      @fileopen = QToolButton.new(@openIcon,"Open File","",self,"load",@toolbar,"open file")
    24
    25      m = QMultiLineEdit.new(self)
    26      m.setGeometry(0,60,638,220)
    27      p = QPushButton.new(QString::fromUtf8("テスト"),self)
    28      p.setGeometry(0,290,638,30)
    29      i = QMultiLineEdit.new(self)
    30      i.setGeometry(0,330,638,90)
    31   end
    32  end
    33
    34  app = QPEApplication.new([$0] + ARGV)
    35  app.shoMainWidget(RQYmc.new)
    36  app.exec


   * 解説

     7   if $PIXDIR.nil?
     8    $PIXDIR = ".//"
     9   end
     ツールバーで表示するアイコンのディレクトリの場所を指定
    20      @openIcon = QPixmap.new($PIXDIR + "fileopen.xpm")
     "fileopen.xpm"を@openIconに指定
     .xpm形式のファイルをアイコンとして使用できます
     アイコンについては Ruby/Qte普及委員会ツールバーのアイコン作り
     を参照してください
    21      @toolbar = QToolBar.new(self,"file operations")
     ツールバーの設定
    22      @toolbar.setGeometry(0,30,638,30)
     ツールバーの表示位置の指定
    23      @fileopen = QToolButton.new(@openIcon,"Open File","",self,"load",@toolbar,"open file")
     ツールボタン@fileopenの設定
     ただし、loadに対応する動作のプログラムを書いてありませんので、
     アイコンをタップするとエラーで終了します 

     ダウンロード fileopen.xpm 右クリックで対象をファイルに保存を選んでください
     ダウンロード後、fileopen.xpm.icoになっていますので、”.ico”を削除してください