読者です 読者をやめる 読者になる 読者になる

各種スクリプトでメモ帳を作成する(その2)

Pythonに続いてRubyでメモ帳を作成した。

download:notepad.py_rb.tar.gz

速いが劣り過ぎ

Python版と見た目は同じだが、内部的に大きな違いがある。
以下にその違いを記す。

  • 長所
    • シグナル処理が早い。QMultiLineEditにおけるBSキーやDelキーによる文字削除ではcopyAvailableシグナルが2度送出される。受入側でフラグの代入処理しか行わなくてもPythonではもたついたが、Rubyではほとんど気にならない。
  • 短所
    • protectedメソッドを呼び出せない。そのため、QMultiLineEditのmarkedTextによる選択状態に関する重要な機能などが使えない。
    • virtualメソッドをオーバーライドできない。そのため、QWidgetのkeyPressEventなどをオーバーライドすることによる、ちょっとしたカスタマイズができない。
    • その他(不具合など)
      • QLineEdit.new(parent, name)形式でコンストラクタを呼び出しても、ウィジェット名が設定できない。QLineEdit.new(text, parent, name)形式では設定できる。

テクニック

  • Rubyメソッドに接続したQtシグナルを切断する方法
@<RubySlot> = Qte::connect(
        <QtObject>, QSIGNAL("<Signal>(<Prototype>)"),
        <RubyObject>, "<RubyMethod>")
        :
        :
<QtObject>.disconnectSignal(
        QSIGNAL("<Signal>(<Prototype>)"),
        @<RubySlot>, QSLOT("rslot(<Prototype>)"))
  • Rubyシグナルを切断する方法
@<RubySignal> = RSignal.new("<Prototype>")
connect(@<RubySignal>, <Receiver>, <Member>)
        -or-
@<RubySignal>.connect(<Receiver>, <Member>)
        :
        :
@<RubySignal>.disconnect

変更点(0.01 → 0.02)

  • MessageBox、FindDialogの各ボタンにアクセラレータキーを設定。
  • テキスト変更ありの状態では、文字コードを変更してもメインウィンドウのタイトルが変更されない不具合を修正。
  • FileDialogの「開く」モードの場合、存在しないファイル名を入力するとエラーが発生する不具合を修正。
  • 「右側で折り返す」表示に変更しただけで、テキスト変更ありの状態となる不具合を修正。