hakeの日記

Windows環境でプログラミングの勉強をしています。

QTKFileDialogをコンパイル

復活したTKmixさんトコでQTKFileDialogのソースが公開されてましたので勉強がてらコンパイルしてみました。コンパイル環境はdev_img-1.6です。
ソースにサンプルが付属してたので、そのままコンパイルしたらmainが無いよというエラー(^^ゞ 以前qtアプリの勉強で使ったmainを使ってfrmSamleを呼び出したらできました。


気が付いたこと

  • 本体メモリは~/Documentsより上に行けない、これはシャープ謹製アプリと一緒
    • 設定変更で解除できました、コメント感謝
  • クラス名って大文字で始まらなくても良いのね
  • LANG=ja_jp.eucjpだと文字化け、デフォルトのLANG=jaだとおっけ
    • Qtopiaにアイコン登録して起動すれば問題ないとのことです


ソースはQTアプリ作る上でかなり勉強になると思うので参考にさせてもらいます。

続きを読む

アプレットなプログラム

サムさんトコでClockAppletの置き換えの話題が出てました。前からアプレットってどうやって作るんだ?と思ってたのでこのくらいの短いプログラムだと非常に勉強になりますね。
ところで自分も試してみたいと思ったのですがclock.hがみつかりません(^^ゞ 
自分の持ってるqtopia-free-1.5.0-1.i386.rpmには入ってないのかなぁ? 朝は時間がないのでまた後ほど探しますorz


ありました、ソースはqtopia-free-1.5.0-1.src.rpmの中でした。ちなみにファイルはこちらからダウンロードさせていただきました。
で、cppだけサムさんのに入れ替えてdev_img-1.6でコンパイル、もともとのMakefileではエラーになったのでtmakeで新規に作り直しました。makeしたら、なんかいきなりインストールまで行くんですけど、危険だな(^^ゞ とりあえずproファイルを書き換えてからtmake→make
できたsoなファイルをオリジナルと入れ替えて

qcop QPE/TaskBar reloadApplets()

うん、日付が出るようになりました。

追記

いろいろ書き換えて試してますけどファイルを置き換えた時点でQtopiaが再起動することが多々あり、再起動後は正常動作してます。


さて、中身の勉強だ。

メニューバーからのメソッド呼出

Ruby/Qteの勉強 その42

通常はメニューバーに機能を登録する場合はメニューバー(QMenuBar)→プルダウンメニュー(QPopupMenu)→メソッドのようにするが、メニューバーから直接メソッドを呼び出すことも可能。


ザウルスでは通常メニュー作成にはQPEMenuBarを使用するが、今回のような場合MENUキー押下でメニューバー左端のメニュー(メソッド)が呼ばれてしまうのでQMenuBarを使用したほうが良いと思う。

続きを読む

アプリ切替時の処理で悩む

ザウルスでRuby/Qteアプリを書いているのですが一つわからない点が……
複数アプリを起動していてRubyアプリから他のアプリへ切り替えた場合(あるいはその逆も)のイベントか何かを拾うことができないでしょうかね。
むー

引数付きシグナル

Ruby/Qteの勉強 その41
画面をタップしてその座標をテキストエリアに表示するプログラム。MyWidgetのmousePressEventにてシグナルtappedを発生、それを受けてMyLineEditのdispPosメソッドで座標を表示させる。その際にシグナルの引数として座標を示すクラスMyPointのオブジェクトを渡す。
シグナルで引数を持つ場合はオブジェクト作成の際にRSignal.new("Object")とし、sendWithで引数を渡す。
詳細は以下
http://noir.s7.xrea.com/rubyqte/?Ruby%2FQte%CE%AE%A5%B7%A5%B0%A5%CA%A5%EB%A1%A6%A5%B9%A5%ED%A5%C3%A5%C8#l2
Qtのオブジェクトには渡せない型があるとのことで、試しにQPointを引数にしてみたらエラーになった。

続きを読む

LOGOをマネる

Ruby/Qteの勉強 その40

LOGOというタートル(カーソル)を相対座標で制御して描画する言語をマネる。
http://ja.wikipedia.org/wiki/LOGO
といってもプログラム言語そのものを作成したわけではなく、Turtleというクラスを作成して、forward(100)をtt.foward(100)と記述といった具合にそのメソッドを記述することで制御を行います。


描画はQPainterで行うが描画対象はQWidgetではなくQPixmapに行う。QWigetの派生クラスPaintWidgetへの描画はrepaintメソッドで発生するpaintEvent内でのbitBltによるブロックコピーで行う、このあたりは以前やった内容を同じ。QPixmapに書くと画像ファイルへの保存が簡単にできます、これは便利(もしかしたらQWidgetからもできるのかもしれないですが)
サンプルでは描画サイズを640x480にしていますが若干画面からはみ出すので、QScrollViewを介してスクロールできるようにしています。

実際の描画内容はdrawメソッドから呼ぶようにしています。内容のサンプルはロゴを始めようにあるhirose01.pdfのプログラムを参考にしました。


ソースは別館のRuby/Qteの勉強部屋にて

draw_whirl


draw_forest

続きを読む