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

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

PerlQt/Embeddedが概ね完成したので、ようやくPerlでもメモ帳を作成できた。

download:notepad.lwl.tar.gz

Python版と同等

メモ帳としてはPython版と機能もスピードも同等である。
protectedメソッドを呼び出せる分、Ruby版よりも機能面で充実している。

QTライブラリ比較

Python版は一番充実しているが、Ruby版と比較しても、Perl版ではQtopia関連のクラスが充実していない。
何が実装されているのかを調べたい場合、Perl版ではソースコードを見るのが最も簡単だと思う(ダウンロード)。
「pig_Q」で始まるファイル名でクラスの実装状況が分かる(ただし、Drag&Drop関連など、Qtopiaには存在しない機能は#ifndef〜#endifでソースファイル全体を無効化している)。
Python版では以下のスクリプトでライブラリ辞書の内容を表示すると良い。

import qt
import qtpe

def pdict(name):
    dict = eval(name + ".__dict__")
    print "----<", name, ">----"
    for k in sorted(dict.keys()):
        print k, "=", dict[k]
    print ""

pdict("qt")
pdict("qtpe")
pdict("qt.Qt")
pdict("qt.QObject")
pdict("qt.QWidget")

# pdict("qt.Q...")で各種クラスの内容を表示できる


Ruby版では以下のスクリプトでモジュールやクラスの内容を表示すると良い。
参考:http://d.hatena.ne.jp/saronpasu/20080227

require "qte"
require "qpe"

def pentry(klass)
    list = Array.new
    klass.constants.each do |name|
        type = eval("#{klass.name}::#{name}.class")
        if type == Fixnum
            type = eval("#{klass.name}::#{name}");
        elsif type == String
            type = '"' + eval("#{klass.name}::#{name}") + '"';
        end
        list << "#{name} = #{type}"
    end 
    klass.methods.each do |name|
        list << "#{name} = Method" 
    end 
    puts "----< #{klass.name} >----\n"
    list.sort.each do |s| 
        puts "#{s}\n"
    end 
    puts "\n"
end

pentry(Qte)
pentry(Qpe)
pentry(Qte::QObject)
pentry(Qte::QWidget)


こうやって比較してみると、Perl版QTライブラリにもより多くのQtopia関連クラスを実装すべきか、悩むところである。