Ruby/Qte普及委員会 質問掲示板

XREAAD
Create  Edit  Diff  FrontPage  Index  Search  Changes  History  RSS  Login

この「質問掲示板」へのコメントスパムがひどいため、このページをコピーした臨時の質問掲示板を作りました。質問のある方はとりあえず「臨時質問掲示板」の方へ投稿お願いします。また、過去の質問に対するコメントも「臨時質問掲示板」の方へ投稿お願いします。なお、このページの質問投稿欄は削除し、また各質問のコメント欄も削除しました。


無題 - 名無しさん (2007-03-30 (金) 14:26:41)

本家hdkさんのサイトは閉じられてしまったのでしょうか?

  • 2007-04-02 (月) 23:07:53 noir : ひだかさんのもう一つのサイト、SLZaurusWikiもアクセスできませんね。どうしてしまったのでしょう。

ruby-qte0.5.4 不具合?

あさだ (2007-01-27 (土) 13:56:38)

いまさらながらruby-qteを0.5.2から0.5.4にあげてみたら、 「ルビーの碁盤」が動かなくなってしまいました。

QHButtonGroup.new

No matching function for overloaded
'new_QHButtonGroup' (ArgumentError)

というエラーが出ます。 このエラーは何者でしょうか?

エラーを出すサンプル

  #!/usr/bin/env ruby
  require 'qte'
  require 'qpe'
  include Qte
  include Qpe

  class MyMainWindow < QMainWindow
     def initialize
        super
        vbox=QVBox.new(self)
        button = QHButtonGroup.new('',vbox,'')
     end
  end

  app = QPEApplication.new([$0] + ARGV)
  mainWindow=MyMainWindow.new
  app.showMainWidget(mainWindow)
  app.exec

rubyのバージョンは1.8.0でも1.8.5でも同じ

  • 2007-01-28 (日) 18:27:33 noir : Qtのドキュメントを見ると、QHButtonGroupのコンストラクタ(つまり QHButtonGroup?.new)には二種類の引数のパターンがあり、そのどちらにも当てはまらないということだろうと思います。第一引数を でなく QString() としてみるとか、引数の型を合わせてみてはどうでしょうか。

日本語変換

- 1 (2006-06-12 (月) 15:32:14)

どうすればいいのでしょう?

Rubyのドキュメントについて

ざうるすにRuby1.4.2 をいれることができたのですが ドキュメントのところでエラーがでます
$ri /opt/QtPalmtop?/lib/ruby/1.8/yaml.rb:85:uninitialized constant YAML::Syck::DefaltLoader?(NameError?) from /opt/QtPalmtop?/lib/ruby/1.8/rdoc/ri/ri_description.rb:1 from /opt/QtPalmtop?/lib/ruby/1.8/rdoc/ri/ri_reader.rb:1 from /opt/QtPalmtop?/lib/ruby/1.8/rdoc/ri/ri_driver.rb:5 from /opt/QtPalmtop?/bin/ri:43

というえらーがでます どこを修正したらよろしいでしょうか?

添付ライブラリーの利用

敷居を越えられない? (2005-11-09 (水) 21:22:40)


以前はお世話になりました。
お陰でHP200LXで溜め込んだデーターを利用できるようになりました。 更にHPで利用していた入力環境を再現したく思っていますが、添付ライブラリーの利用ができません。
どのようにすれば利用できるようになるかお教え戴けないでしょうか。
RUBYは『ZAURUS SL-C3000徹底活用マニュアル』付属CDの Ver.1.8.0.1を使用しております。

  • こんにちは。「添付ライブラリー」というのはRubyに標準で添付されている拡張ライブラリのことでしょうか。前のご投稿を見ると jcode 等は利用できているようですが、具体的にどの拡張ライブラリが利用できないのでしょうか。 -- noir 2005-11-10 (木) 06:36:10
  • 早速に有難うございます。 rubyの仕組みが全く理解できていないためお手数をお掛けしています。 -- 敷居を越えられない? 2005-11-11 (金) 09:25:11
  • 間違ってcrキーを押してしまいました。 zaurusで画面やキーイベント(Cのgetchのようなこと)を利用したくて、irb で curses.so を require すると true となるのですが init_screen をすると NameError?: undefined local variable or method 'init_screen' となり、その他のコマンドも使えない状況です。 感じとしてライブラリが使えないようなのかなと思いますが別途ruby orgからダウンロードしてみるのですが利用方法についての知識がありません。 よろしくお願いいたします。 -- 敷居を越えられない? 2005-11-11 (金) 09:39:09
  • 早速に有難うございます。 rubyの仕組みが全く理解できていないためお手数をお掛けしています。 -- 敷居を越えられない? 2005-11-11 (金) 09:40:36
  • include Curses; init_screen とするか、Curses.init_screen としてみたらどうでしょうか。 -- noir 2005-11-11 (金) 21:59:48
  • ちなみに、irb上で試してみると、キー入力を受け付けなくなってしまいますが…。 -- noir 2005-11-11 (金) 22:02:01
  • 有難うございます。目下本番プログラムを作る前にirb上で動作確認をしながら作っておる関係上、本番上での確認は少し先になります。 ご指示いただいた方法でirb上で include "Curses" を入力後 init_screen してみましたが、他のコマンドを入力してもアクションがありませんでした。 その為御指示頂いた方法をもとに先に進んで見ます。 結果は改めて報告させていただきたいと思いますのでよろしくお願いいたします。 -- 敷居を越えられない? 2005-11-12 (土) 17:48:18
  • がんばってください。2つほど。Rubyのクラス、モジュール、ライブラリの概念や使用方法について、www.ruby-lang.org にあるリファレンスマニュアル等でもう一度確認されることをおすすめします。それと、HP200LXからの移行ということで、curses ライブラリでもターミナル上で画面制御やキー入力を扱うプログラムを作ることは可能だと思いますが、それよりせっかくザウルスなんですから Ruby/Qte でGUIなアプリを作ったほうが便利じゃないかと思います。余計なことですみません。 -- noir 2005-11-13 (日) 13:34:53
  • ご丁寧なアドバイス有難うございます。 rubyで作りたいと思いましたのは、rubyのある環境ならどこでも使える、Ruby/Qteは敷居が高そうだ、の2点に絞られますがこれらについてのアドバイスが頂ければ非常に有難く思います。 -- 敷居を越えられない? 2005-11-14 (月) 10:09:35

キーイベントの取得方法

kaz? (2005-09-04 (日) 16:59:02)


お世話になります。
ruby/qteを使ってzaurus用アプリを作っています。背面の「進む」、「戻る」スイッチの操作を取り込みみたいと考えています。キーイベントを受け取る様にするらしいことはわかりました。keyPressEvent関数を使うらしいこともわかったのですが、スロットを割り当てるところが良く分かりません。

ruby/qteの例題でもキーイベント取得に付いては見つかりませんでした。
ここを見ろとかでも結構ですので、なにか情報をいただけるとありがたいです。
よろしくお願いします。

kazさん、こんにちは。

keyPressEvent()はイベントハンドラで、キーイベントを受け取って処理したいウィジェットで再定義します。しかし Ruby/Qteの場合、イベントハンドラを再定義できるウィジェットのクラスは限られていて、そのための特殊なクラス (QRCanvasViewなど) が用意されています。

keyPressEvent()にはQKeyEventクラスのインスタンスが渡ってくるので、それを参照して押されたキーコードを調べ、目的の処理を行うコードを書くことになります。詳しくは、リンク集 にある Qt 2.3.2 documentation から、QKeyEvent クラスの説明をご覧ください。

また、キーイベントを受け取りたいウィジェットは、Tabキーやクリックによってフォーカスできるように設定しておく必要があります。これは、 setFocusPolicy(QWidget::StrongFocus?) を実行すれば済みます。

penguin.rb の例で言うと、クラス FieldView? の定義のところで、

 class FieldView <QRCanvasView
   def initialize(field, parent = nil, name = '')
 # ... 略 ...
     setFocusPolicy(QWidget::StrongFocus) # ←追加
     catchEvent
   end
 # ... 略 ...
   def keyPressEvent(ev)
     case ev.key
     when Qt::Key_Up # 進む
       # ...略...
     when Qt::Key_Down # 戻る
       # ...略...
     when Qt::Key_Return # OK
       # ...略...
     when Qt::Key_Escape # Cancel ※通常はCancelを押すと終了してしまうが…
       # ...略...
     end
   end

のようにしてやれば、背面のキー操作に応じた処理ができるようになると思います。 -- noir 2005-09-05 (月) 23:51:15

  • noirさん、早速のご回答ありがとうございます。おかげさまで狙い通りの動作ができました。#また一歩野望に近づいた! -- kaz? 2005-09-06 (火) 21:01:43

Zaurusu Rubyでの日本語表示

敷居を越えられない? (2005-07-11 (月) 11:24:25)


あまりにもの初歩的なことでどこでお尋ねしてよいやら分からず、こちらにおすがりします。
下記のプログラムをirbで逐次実行すると期待通りの結果が出るのですが、 ruby test.rb で実行すると日本語が全く表示されません。
どうかご教示頂けないでしょうか。
 使用PDA Zaurus SL-C3000
 使用ruby ver1.8 + ruby/qte ver0.5.1

test.rb

  1. ! ruby -Ks
 require "jcode"
 require "kconv"
 require "jstring" #  Hiroyuki Komatsu <komatsu@taiyaki.org>から拝借

 jstr = "alpha+漢字混合文字表示テスト"
 printf("/n文字列=%s/n文字数=%d", jstr, jstr.size)
  • こんにちは。スクリプトはShift JISで作成しているのでしょうか。またrubyの実行はターミナル (端末ウィンドウ) 上で行っているのでしょうか。ターミナルが表示できる文字コードはEUC-JPなので、出力時に変換してやる必要があります。 -- noir 2005-07-12 (火) 08:15:30
  • 早速ご丁寧にご教示いただき有難うございます。 文字コードをEUCに変更したところ無事解決できました。 -- 敷居を越えられない? 2005-07-12 (火) 10:37:36

完成しました。

けー? (2005-05-07 (土) 00:18:43)


たびたび質問させていただいたけーです。
漸くプログラムが完成しました。
いろいろありがとうございました。

http://zaurus.gozaru.jp/

open-uriのエラーに関しては再起動後エラーが出なくなり原因不明です。
とりあえずほったらかしにしてます…

  • おめでとうございます! -- noir 2005-05-10 (火) 22:26:25

open-uriについて

けー? (2005-04-16 (土) 00:58:07)


またまた質問してすみません。。。
例えばopen-uriを利用してhttpのURLを連続して開く場合エラーが出てしまいます。

open("http://…") do |f|
 f.each_line() do |line|
  print line
 end
end

open("http://…") do |f|
 f.each_line() do |line|
  print line
 end
end


エラー内容は

No space left on device - /tmp/open-uri5029.i (Errno:ENOSPC)


と出ます。
closeすればいい?らしいですがやり方が分かりません。
どのようにすればいいのでしょうか?

  • ブロックの終了でcloseも行われるのだと思ってましたが…。ザウルスの初期化スクリプトをいじって /tmp を広げるという手もありますね。 -- noir 2005-04-19 (火) 14:34:56

ラベルの更新

けー? (2005-04-14 (木) 00:34:31)


ボタンをクリックしてすぐにラベルの表示を変更させたいのですが上手くいきません。
どのようにすればいいでしょうか?

class RQYmc < QMainWindow
 def initialize
   super
   bg = QVButtonGroup.new(self)
   setCentralWidget(bg)
   @m1 = QPushButton.new("ボタン",bg)
   $l1 = QLabel.new("ラベル1",bg)

   connect(@m1,QSIGNAL("clicked()",self, 'labelup')
 end

 def labelup
   $l1.setText("ラベル2")   #この時点でラベルを更新したいです。

   さらに処理     #この処理が終わると"ラベル2"に変更される

 end
end
  • 表示が崩れてしまいました・・・ -- けー? 2005-04-14 (木) 00:35:25
  • はじめまして。setText() の後に update() を呼び出してみたらどうでしょうか? -- noir 2005-04-14 (木) 11:15:36
  • 遅れながら、はじめまして。$l1.update()及びupdate()を実行したのですがダメでした。うむむ -- けー? 2005-04-14 (木) 19:41:04
  • なぜかLineEditでは更新できました。LineEditで処理させたいと思います。 -- けー? 2005-04-14 (木) 23:59:39

↓の続きです

てる? (2004-12-26 (日) 00:40:56)


下の問題は解決できました!
でも下のスクリプトのエスケープの関数では「’」をエスケープできません。word.gsub(/'/,"\\'")と書いてもうまくいきません。
なぜか教えてください!

private method `gsub' called for nil:NilClass? (NoMethodError?)

てる? (2004-12-24 (金) 15:10:28)


上のようなエラーが出ます。
コードの一部は↓に書きました。初心者なんですが是非教えてください。

def escape(word)
word.gsub(/'/,"\'")
end

mysql = Mysql::new('localhost','root','password')
mysql.query("use table;")
mysql.query("insert table set 〜 = '#{escape(変数)}'")

  • エラーメッセージのとおり、escape()に渡したオブジェクト(変数word)がnilなんだと思います。 -- noir 2004-12-25 (土) 15:13:38

ZDBへのアクセス方法

one? (2004-09-05 (日) 14:35:31)


メモ帳の置き換えソフトを作っています。現状はzdbatを使用しているのですが、できればプロセスを起動せず、直接DBにアクセスしたいと思っています。c++からアクセスできるライブラリはあるのですが、それをRubyから使用するにはどうすればよいのでしょうか。

  • Rubyの拡張ライブラリを作るしかないでしょうね。誰か作りませんか? -- noir 2004-09-13 (月) 07:52:02

disconnect

あさだ? (2004-07-28 (水) 11:39:39)


お久しぶりです。
signalのdisconnectはできないんでしょうか?
disconnectなんてメソッドはないよん、と怒られてしまうのですが。

  • ほんとうですね。staticメンバ関数の QObject::disconnect は有効なようです。 -- noir 2004-07-29 (木) 14:00:31
  • なるほど。確かにこれならメソッドがないとは言われませんね。ruby的にはQObjectのクラスメソッドになるのかな? -- あさだ? 2004-08-01 (日) 19:25:23
  • ところが今度は、メソッドの使い方がわかりません。 -- あさだ? 2004-08-01 (日) 19:26:12
  • signalを指定するのに、文字列を引数にしなくてはいけないようです。リファレンスではconst char * signalとなっています。が、自分でnewして作ったシグナルをどう渡してやればいいのかわかりません。 -- あさだ? 2004-08-01 (日) 19:29:24

CD-ROM検索ソフトの作り方

m_fuji? (2004-03-08 (月) 23:08:44)

最近のCD-ROMソフトはXMLが増えてきました。ZAURUS用検索ソフトありますか?若しくは作り方教えてくれませんか?

  • 他の質問のコメントのなかに埋まっていたので、質問に上げました。 -- noir 2004-03-10 (水) 22:59:53

QTextViewでタップ取得

ヴィネ? (2004-03-08 (月) 18:35:24)


表題のとおり、QTextViewでスタイラスのタップを取得したいのですが、うまくいきません。
catchEventでmousePressEventやmouseReleaseEventをオーバーライドしてみたのですが駄目でした。

ご存じの方、教えていただけないでしょうか?

  • ヴィネさん、はじめまして。本当ですね。contentsMousePressEvent も試してみましたが、QTextView ではイベントを取得できませんでした。なぜだろう…。 -- noir 2004-03-09 (火) 06:42:28

Rubyでの時間に関する質問

京都? (2004-02-15 (日) 01:58:52)


Rubyで書いているプログラムの実行時間を計りたいのですが、うまくいきません。計りたい始点と終点で現在時刻を表示させてあとは手計算です。時刻の計算のしかたか、start---finish間の時間を計るプログラムのヒントをいただけませんか?
お願いします。

  • そういうときは time コマンドが使えますよ。コマンドラインで time Rubyスクリプト と打ち込んで実行すれば、終了時に所要時間が表示されます。 -- noir 2004-02-16 (月) 18:49:04
  • おお、こんなコマンド初めて知りました。"time ruby aaa.rb"も、できました。ありがとうございました。>京都さん、横からごめんなさいm(__)m -- 龍? 2004-02-16 (月) 21:16:45
  • noirさんはじめまして。そしてどうもありがとうございます。rubyで分散処理を行っているのですが、データ転送が遅いということはありますか?また教えてください。お願いします。 -- 京都? 2004-02-17 (火) 18:21:36
  • あ、Rubyスクリプトのなかの特定の処理に関して実行速度を計測したい、ってことですか。勘違いしてました。開始時刻をどこかに保存(グローバル変数とか、一時ファイルをtouchするとか)して、終了時にその値を呼び出して現在時刻との差を求める、というのではどうなんでしょう? Time.at(finish_time - start_time).gmtime.strftime("%X") で表示する、とか。 -- noir 2004-02-17 (火) 22:17:53
  • まさにそれです。ありがとうございます。noirさんまた分からないことがでてきましたらお願いします。ありがとうございました。 -- 京都? 2004-02-18 (水) 16:08:05
  • AspectR とそれを使ったプロファイラの紹介が Linux Magazine に載ってました。Ruby標準でも ruby -r profile スクリプト名 でプロファイラが使えるというのは今まで知りませんでした。 -- noir 2004-03-10 (水) 16:32:55

問題発生

友義? (2004-02-01 (日) 08:55:27)


数当てゲームを作ってみたんですけどいくらやってもあたらないのでPメソッドで
答えを表示させたら答えが1.2134453776とかいう数字になるんですが
どうしたらいいんですか?・・・

  • どこかで浮動小数点演算が混じっているんでしょう。どの変数が整数でなく浮動小数点数になっているのか、調べてみるとよいのでは。 -- noir 2004-02-02 (月) 18:31:27
  • それはどうゆういみですか? -- 友義? 2004-02-05 (木) 18:21:50
  • 答えを整数値にしたいんですよね? 変数aに答えが入っているとして、浮動小数点数を整数に丸めたいってことだけなら、a = a.round するだけですが、その前に、答えを求める演算が意図せずに浮動小数点数になっているのだとしたら、なぜそうなったのか原因を調べておいたほうがいい、ということです。 -- noir 2004-02-06 (金) 08:40:06
  • どうもありがとうございました。もしよかったらもしよかったらメルアド書いておくのでいろいろ教えてもらえませんか?メルアド→rupanzigen1@mtb.biglobe.ne.jp -- 友義? 2004-02-07 (土) 10:25:00

QCanvasに登録したQCanvasItemの削除について

okapon? (2004-01-30 (金) 22:44:10)


現在、QCanvasを使ったドローツールを作ろうと勉強中です。
QCanvasに登録したQCanvasItemの削除のやり方がわかりません。
removeItemメソッドを使ったのですが、うまくいきませんでした。

どなたかごぞんじのかた、アドバイス願います。

  • okaponさん、はじめまして。私もQCanvasにあるQCanvasItemを消そうとして、とりあえず GC.disable; item.hide; item = nil; GC.enable; GC.start; のようなコードを書いてました。たんに見えなくなっただけのような気がしますが…。 -- noir 2004-01-31 (土) 01:46:59
  • はじめまして、noirさん。アドバイス、ありがとうございます。さっそく試してみましたが、私も同じく見えなくなるだけでした…。 -- okapon? 2004-01-31 (土) 11:33:39

またまた質問

tomoyosi? (2004-01-30 (金) 17:44:36)


ランダムに出す(数字)やりかたはわかったんですが正解率を30%とかにするにはどうすればいいんですか?

  • 「正解率を30%とかにする」というのは、もうすこしくわしく言うと、どういうことですか? -- 龍? 2004-01-30 (金) 20:21:11
  • rand(10)が、(0から9までの)特定の値を返す確率は10分の1だから、たとえば0から2までを正解とすると、正解率は10分の3、つまり30%ということになります。こんな説明じゃわからないかも? -- noir 2004-01-31 (土) 01:55:54
  • ちなみに、 rand() は本当に統計的にランダムな値を返すわけではないので、30%の確率というのは本当は信頼できません。 -- noir 2004-01-31 (土) 06:48:48

助けてください!!!

tomoyosi? (2004-01-28 (水) 20:09:00)


ぼくは12歳ですけどいちおうプログラムかいてます。
ところで質問なんですが数字をランダムで選ばせるにはどうすればよいでしょうか?

  • tomoyosiさん、はじめまして。Rubyの組み込み関数randを使えばよいでしょう。 -- noir 2004-01-29 (木) 05:52:35
  • ありがとうございます!!なんとかいけそうです! -- tomoyosi? 2004-01-29 (木) 20:16:50

ご報告(という名の宣伝)

あさだ? (2004-01-20 (火) 13:56:39)


ここでいろいろと教えていただいたおかげで、作っていたプログラムが一応完成しました。お礼を兼ねて報告させていただきます。
ありがとうございました。
http://sowhat.ifdef.jp/rgoban/index.html

  • 下のQdialogの問題については、結局本質的には解決しませんでした。右上のボタンはダイアログの位置を調節することで隠すという姑息な逃げ方をしています。でもOKキーとかcancelキーを押されると困る。 -- あさだ? 2004-01-20 (火) 13:58:55
  • QRDialogにはどうもacceptやrejectスロットがないようなので、自作のacceptスロットを作り、その中でcloseを呼んでやればよさそうです。しかし、この場合OKキーとかには反応しません。QKeyEventを捕まえてやればいいのかと思ったのですがkeyPressEventを上書きしてもQKeyEventを捕まえることはできませんでした。 -- あさだ? 2004-01-20 (火) 14:06:15
  • ご報告ありがとうございます。 FrontPageリンク集 にも載せておきましたよ。 -- noir 2004-01-20 (火) 21:51:08
  • C750にインストールして動かしてみました。SDやCFにもインストールしてみました。結果をあさださんのウェブページの掲示板に書いておきました。(^^)/ -- 龍? 2004-01-21 (水) 12:08:13
  • リンクありがとうございます。しかし開発者っていうのはちょっと気恥ずかしい。Ruby/Qteの開発者という意味かと思ってました。私自身は利用者のつもりでいました。 -- あさだ? 2004-01-21 (水) 13:44:06
  • hdkさん、もし見てらっしゃったら、hdkさんのところからもリンクしていただけたら嬉しいです。それとも勝手に書き加えちゃってもいいのかな? -- あさだ? 2004-01-21 (水) 13:52:58
  • 勝手に書いてもらってもOKです。といいながら書いておきました^^ -- hdk 2004-01-21 (水) 17:14:48
  • hdkさんありがとうございました。ところで、よくわからないままに「GPLに基づきます。」とか書いてみたんですけど、これって必要ですか? -- あさだ? 2004-01-22 (木) 12:22:02
  • はい。必要です。わからないままでいいかどうかは謎ですが^_^; -- hdk 2004-01-23 (金) 11:04:53
  • すいません、勉強します。一応GPLの和訳は読んでみたのですが、Ruby/Qteで書いたものは、QTのライセンスの制限は受けないようにも読めるんですよね。それとも「内部に組み込んだ」ってところに引っかかるのかなあ? -- あさだ? 2004-01-23 (金) 13:36:25

QSliderの動作

? (2004-01-19 (月) 21:22:48)


はじめまして。龍といいます。
オライリーの「Qtプログラミング入門」のサンプルをRuby/Qteで書きながら、
覚えようとしているんですが、1つ自力で解決できないことが出てきたので教えてください。
QSliderの演習で、「スライダーを離した時にLCDの数字が更新される」というのを実現するのに「valueChanged」というメソッドを使っていますが、このメソッドで実現できますか?
どうしても、「sliderMoved」と同じようにスライダーを動かすと数字が更新されていくんですが。
「sliderReleased」のシグナルを受け取ったタイミングで、スライダのvalueをLCDでdisplayしてやるしか、実現方法が思い浮かばなかったんですが?

  • 龍さん、はじめまして。スライダーを離したときに valueChanged シグナルが出るようにする方法ですが、QSlider#setTracking(false) すればそういう動作になります。 -- noir 2004-01-20 (火) 11:13:26
  • あ! こんな属性があったんですね。noirさん、ありがとうございます。でも、デフォルトはtrueなんですね。(^^; -- 龍? 2004-01-20 (火) 12:18:48

右クリック

g2? (2004-01-08 (木) 15:48:23)


はじめまして。
Qt初心者です。学校の授業でQtを使用しています。
質問「右クリックが押されたら、というシグナルは存在するのでしょうか?また、右クリックを押す事でメニューを表示させたりなんかは出来ますでしょうか?」
お願いします。

  • はじめまして。「右クリックが押されたら、というシグナル」は、存在しないと思います。mousePressEvent() メソッドをオーバーライドして、引数に渡された QMouseEvent? オブジェクトを調べれば、右クリックかどうかはわかるので、そのへんを調べてみてはどうでしょうか。 -- noir 2004-01-08 (木) 23:22:17
  • まだまだ勉強が足りず、基本的な質問をしてしまいました。もう少しマニュアルと格闘してみたいと思います。ありがとうございました。 -- g2? 2004-01-13 (火) 15:27:39

列挙型

あさだ? (2003-11-15 (土) 14:11:41)


度々すいません。
QMultiLineEdit?::setWordWrap
は引数にQMultiLineEdit::WordWrapという列挙型の変数をとるとなっているのですが、列挙型というのはRubyではどのように扱ったらよいのでしょうか?

  • QMultiLineEdit?::NoWrap?, QMultiLineEdit?::WidgetWidth? などが、定数として定義されてます。 -- noir 2003-11-17 (月) 05:29:03
  • ありがとうございます。でもこれは試したはずだったのに。大文字小文字を間違えてたのかな?一般的に、定義されているクラス定数のリストを得る方法はあるのでしょうか? -- あさだ? 2003-11-19 (水) 15:00:49
  • ズバリ、Module.constants です。 -- noir 2003-11-20 (木) 23:13:00
  • ありがとうございます。リファレンスの読み方が不十分でした。 -- あさだ? 2003-11-21 (金) 14:45:12

タイトルバーの右端のボタン

あさだ? (2003-11-13 (木) 15:06:33)


次々質問してしまってすいません。

QPEApplication上でQDialogを表示すると、タイトルバー(?一番上の青いところ)の右端にOKボタン、×ボタンが表示されます。
このボタンを表示させないことはできるのでしょうか?
もしくはこのボタンが押された時に出るシグナルはあるのでしょうか?

何をしたいかというと、Qdialogの中にQPushButtonでOKボタンをつくって、
それを自作のスロットにつなげているのですが、
タイトルバーのOKボタンはこれと挙動が違うので、同じにするか、
そもそも表示しないようにしたいのです。

(そもそもQPEApplicationって何者ですか?QTのリファレンスには載ってないみたいだけど。)

  • QPEApplication の説明はこちらにありますご参考まで。 http://www.malor.net/Qt/qtopia-free-1.5.0/en/qtopia/qpeapplication.html -- ブースカ? 2003-11-14 (金) 02:28:44
  • ダイアログの場合、OKボタンをaccept()に、キャンセルボタンをreject()に結びつけて、QDialog#exec の返り値でどちらが押されたかを見るようにすれば、タイトルバー右のOK、×ボタンと同じ意味になります。 -- noir 2003-11-14 (金) 06:02:48
  • いやそれはわかるのですが。acceptにコネクトするとDialogからすぐ抜けちゃうじゃないですか。抜ける前に後処理をしたい(場合によっては警告を出して抜けないこともある)のでMyAcceptというスロットを作ってそれにコネクトしてるのですが。 -- あさだ? 2003-11-14 (金) 11:28:04
  • ちょっと調べてみたところQt-develの過去ログに同じ話題がありました。http://www.kde.gr.jp/ml/Qt-devel/msg00678.html 半分解決してるようですが、よく理解できません。涙 -- あさだ? 2003-11-14 (金) 11:31:10
  • なるほど…。お役にたてずすみません。 -- noir 2003-11-14 (金) 14:31:29
  • Zeditorのファイルを開くダイアログは右上のOKとacceptとやっても上書きされません。QSLOTのacceptは内部的にはacceptという名前にはなっていないようです。qte.rbを読んでみたらQSLOT(str)="1"+strとなっていました。しかしdef 1acceptとしてもこれはsyntax errorになってしまいます。 -- [[あさだ?] 2003-11-15 (土) 14:03:08
  • QRDialog を継承すればいちおう accept の上書きはできます。けれども、accept の定義のなかで super, done, setResult などが使えないようなので、目的は達成できなさそうですね…。 -- noir 2003-11-17 (月) 06:14:11
  • QRDialogは試してみたのですが、上書きする以前にQSLOT("accept()")につなげても、Dialogから抜けてくれませんでした。(なんか勘違いしてるのかも) -- あさだ? 2003-11-17 (月) 19:46:13

QListBoxItem?

あさだ? (2003-11-10 (月) 00:57:05)


はじめまして。
C700でRuby/Qte0.4をいじりはじめました。
わからないことだらけで悪戦苦闘しています。

さて、QListBoxを使おうと思って、QTのリファレンスを見ながら

   list = QListBox.new(nil)
   item = QListBoxItem.new(list)

とかやろうとしたら、QListBoxItemにはnewなんてメソッドはないよ、
なんていう思わぬエラーが出てしまいました。
(undefined method `new' for Qte::QListBoxItem?:Class (NameError?))

p QListBoxItem?.methods
とやってみると、確かにnewはないようです。

こんなときはどうすればいいんでしょうか?
newがないクラスなんてあるのでしょうか?
QListBoxItemは使用できないということですか?

  • はじめまして。QListBoxItemは抽象クラスなので、newメソッドがないのではないでしょうか。ただ、QListBoxText.new でもうまくいかないみたいです (argument errorになる)。新しいアイテムを追加するときは list.insertItem を使えばよいでしょう。 -- noir 2003-11-10 (月) 16:09:41
  • -- 2003-11-11 (火) 14:45:55
  • -- 2003-11-11 (火) 14:45:56
  • 回答ありがとうございます。 とりあえずQListBox.insertItemを使っていますが、これだとclickedのシグナルが使えません。リファレンスをみるとclickedの引数はQListBoxItemなので。 この質問をしたのは主に二つ理由があります。 まず、QTとは関係なくnewのないクラスなんてあり得るのかということ。Rubyでは、すべてのクラスでclassクラスで定義されているメソッドはクラスメソッドとして使えるのではないのでしょうか?(nilClassとかの例外を除いて) もう一つは、理屈はどうでもいいからなんとかQListBoxItem(というかclickedシグナル)を使う方法はないのかな?ということなんですが。 -- あさだ? 2003-11-11 (火) 15:00:17
  • すいません。掲示板の使い方がわからなくて、ごみを残してしまったようです。 いわゆる「レス」をつけるときには改行はできないのでしょうか? -- あさだ? 2003-11-11 (火) 15:02:05
  • Ruby レベルでも undef new することはできます。QListBoxText が動かないのはまた見ておきます。でも結構忙しいのでそのうちということになってしまいそうですが。で、QListBox::item とかで QListBoxItem? オブジェクトを取得することはできますよね。かっこよくないですが。。 -- hdk 2003-11-11 (火) 16:35:28
  • 改行を入れるのは、ちょっと面倒ですが、このページの上のほうの「編集」で、ページごと編集してしまうしかなさそうです。すみません。 -- noir 2003-11-11 (火) 21:35:38
  • あと前提として、clickedシグナルを使う、という場合、ふつうは connect(list, QSIGNAL('clicked(QListBoxItem?*)'), self, 'some_slot') みたいに使う、という点はよろしいでしょうか。そういう使い方ではなく、例えばQListBoxを継承したクラスの中で、clickedシグナルを送出するようなメソッドを定義する、ということになると、RSignal#send, RSignal#sendWithを使わずに、Qt(C++)のシグナルを送出することができるかどうか、という問題になりますね。C++では、そのシグナルをもつクラスのメソッド内で emit clicked(item); のように書くことになりますが、そういうコードをRubyで書いたことがないのでわかりません。ちょっと試してみます。 -- noir 2003-11-12 (水) 12:18:21
  • ああそうか。QListBoxの中身はすべてQListBoxItemなんですね。 たとえinsertItem(QString)でつっこんだものでも。だからQListBox.itemでQListBoxItemがとりだせるし、clickedをスロットにつなげば仮引数にはQListBoxItemが入っていると。 -- あさだ? 2003-11-12 (水) 23:42:16
  • RubyのArrayのように中身の型は要素ごとに違うのかと思ってました。1番目はstring、2番目はpixmap、3番目はQListBoxItemというように。だからQListBoxItemをnewで作ってやらないとどうしようもないと思ってたんです。どうもお騒がせしました。 -- あさだ? 2003-11-12 (水) 23:43:11

rubyの

Joshi? (2003-11-07 (金) 09:57:31)


はじめまして。 Ruby/Qte便利に使わせていただいています。
いま簡易DBを作ろうとしているのですが、どうせならSQLが使えるものに使用と思い。SQLiteを使おうとしています。 母艦のLinuxBOX上では、普通に"ruby ./extconf.rb" => "make"でできたのですが、SL-C7XX用にクロスコンパイルするにはどうすればいいのでしょうか? 一応クロスコンパイル環境は持っているのですが、クロスコンパイル環境で extconf.rbをする方法がわかりません。 使っているのは、Sharpさんがホームページで提供されているクロスコンパイル環境です。 以上よろしくお願いします。

  • はじめまして。Ruby/Qteもクロスコンパイルしてできる拡張ライブラリなので、そのコンパイル方法 (hdkさんのサイト:Ruby/Qteメモ?) が参考になるのではないかと思います。先にrubyをソースからクロスコンパイルする必要があるようです。 -- noir 2003-11-08 (土) 07:14:54
  • ありがとうございます。 とても参考になります。  週末にクロスコンパイル環境をあきらめて、Zaurus上のセルフコンパイル環境で試していたのですがどうにもうまくできませんでした。 これから再度クロスコンパイル環境で試してみます。 本当にありがとうございました。 -- Joshi? 2003-11-10 (月) 08:51:16

SL-C7xxでの縦表示

shukaku? (2003-10-02 (木) 16:47:00)


SL-C760でRuby/Qte 0.5.1を使わせていただいてます。画面表示の縦横を切り替えて"縦"の状態でRuby/Qteを使ったスクリプトを起動すると、下記のエラーになり終了してしまいます。対処方法はあるでしょうか?

QLinuxFbScreen?::connect() disp spec Transformed:Rot270:Vga:0 != server disp spec Transformed:Rot0:Vga:0
Transformed driver cannot connect
Aborted

  • あらいつのまに。えーと、このエラーは、ターミナルを起動後に縦横を切り替えた場合に出るのではなかったでしょうか。環境変数 QWS_DISPLAY が縦横の情報に追従しないのが原因なので、正しく設定で直るのではないかと思います。Qtopiaにアイコン登録してしまえば、縦横切り替えてもそのようなエラーは出なかったと思います。 -- hdk 2003-10-02 (木) 19:05:14
  • なるほど!環境変数が影響しているとは思い至りませんでした。確かにQWS_DISPLAYの値を変えると、縦画面にしたターミナルからでも起動できました。デスクトップにアイコンを登録しておけば、スクリプト起動後に画面を回転させても追随するんですね。ううむ、素晴らしい! -- shukaku? 2003-10-02 (木) 20:42:57

開発環境

kiti? (2003-09-22 (月) 13:21:18)


Ruby/Qteに興味をもったのですが、開発はできればWin2000で行いたいと
思っています。
Win2000での開発環境(動作確認含む:エミュレート?)って構築可能ですか?
情報、よろしくお願いします。

  • hdkさんのQtopia SDK on Cygwinで、qvfb環境用にRuby/Qteをビルドするという方法がありますが、私はSWIGのインストールのあたりで挫折してしまいました。あとは、Ruby/Qt2で開発して、動作確認後にRuby/Qteに書き換えるとか…。 -- noir 2003-09-22 (月) 22:22:42
  • 情報ありがとうございました。試してみます。 -- kiti? 2003-09-24 (水) 10:35:20

.xpmファイルについて

masaya? (2003-09-21 (日) 02:31:47)


ToolBarで使用するアイコン(*.xpmファイル)を
QPushButtonで文字の変わりに表示させたり、
QMultiLineEditで表示させる事は可能でしょうか?

  • QPushButtonでの表示は、@pb = QPushButton?.new(QPixmap.new(xpmfile), 'text', ...) のように、第1引数でアイコンを指定すればできます。QMultiLineEditのほうは…ZEditorが参考になるかもしれません。 -- noir 2003-09-22 (月) 06:24:27
  • ありがとうございます。 -- masaya? 2003-09-22 (月) 08:09:31

QCopEnvelope? に即値のintを渡すには?

noir (2003-09-10 (水) 18:47:36)


FAQ にある、qcop QPE/System 'setScreenSaverMode(int)' 0 を Ruby で書いてみました。

require 'qte'
require 'qpe'
include Qte
include Qpe
a = QApplication.new([$0] + ARGV)
env = QCopEnvelope.new('QPE/System', 'setScreenSaverMode(int)')
env << 0
env = nil
QTimer::singleShot(0, a, QSLOT('quit()'))
a.exec

ところが、これを実行しても、オートパワーオフが生きたままです。そのうえ、qcopコマンドでオートパワーオフを殺した後でこのスクリプトを起動すると、またオートパワーオフが生きてしまいます。即値の 0 がちゃんと渡っていないような気がするんですが、どうしたらいいんでしょうか。

  • 私もわからなかったので、system()でqcopを実行するようにしてしまいました。 -- one? 2003-09-10 (水) 22:43:02

"Qtopiaアプリのように起動-設定"を解除するにはどうすればいいでしょうか?

  • .desktop ファイルを削除して、qcop QPE/System 'linkChanged(QString)' です。 -- noir 2003-09-10 (水) 18:34:09

スクリプト実行中にも普通のアプリのように他のアプリと切り換え可能にするには?

qcop...'raise()'以外として"Qtopiaアプリのように起動"設定が必要?ではないかと思いますがお教えください。

  • こちら の件ですよね。 -- noir 2003-09-10 (水) 18:34:46
  • そのとおりです。スクリプトトライアル中の切り換え方法はありますでしょうか? ryo_h
  • SL-C760を購入してしまいました ;-) で、Ruby/Qteスクリプトをターミナルから起動して、他のアプリに切り換えてから、ターミナルに戻って bg; qcop QPE/Application/スクリプト名 'raise()' を実行してみたり、KeyHelperのタスク切り換えをやってみましたが、やはりうまくいかないですね。 画面が真っ白になったり、「しばらくお待ちください」と出る。SL-A300ではうまくいくんで、画面の縦横表示自動切り替えが何か影響しているような気がするんですが、どうでしょう。 -- noir 2003-09-12 (金) 04:40:11
  • はじめまして。これ、普通のQtアプリでも同じで、desktopファイルがないものをコマンドラインから起動してタスク切り替えすると同じ状態になります。desktopファイルがあれば問題ありません。プログラムの場所はQtPalmTop/binでなくても、同じ名前ならいいようです。なので、トライアル中でもとりあえずdesktopファイルを作っておけばいいのではないかと思うのですが。 -- inue? 2003-09-12 (金) 12:27:37
  • inueさん、ありがとうございます。ryo_hさん、試してみてはいかがでしょうか。 -- noir 2003-09-13 (土) 00:18:57
  • 私も同じことを悩んでました。試してみます。 -- masaya? 2003-09-13 (土) 10:18:26
  • inueさん、ありがとうございます。切り替わりました。スクリプトそのものはウソを言っても問題ないんですね。 ですが、この後、それを元に戻せません。それが、この上の質問"QTアプリの...を解除するには"です。desktopファイルを消しても、今度はきれいに切り替わったままです。 実質問題が出るかどうかは?ですが、何をしているかわからないというのは気になります。 ...すみません、inueさん、文句を言うような形になってしまいましたが、inue流を使わせてもらってrubyを勉強します。ありがとうございます。 -- ryo_h? 2003-09-13 (土) 15:23:59
  • qcop QPE/System 'linkChanged(QString)' って、「ソフトウェアの追加/削除」の後の動作と等価じゃないのも気になってます。デスクトップにはアイコンが入りますが、スタートメニュー(?)には出てこないし…。A300だとあまり気にならなかったのですが。 -- noir 2003-09-14 (日) 13:22:19
  • この件を FAQ の文章に反映させました。inueさん、ryo_hさん、ありがとうございました。 -- noir 2003-09-14 (日) 13:42:54
Last modified:2008/01/22 02:15:51
Keyword(s):
References:[コメント2003] [臨時質問掲示板] [ニュース2004] [ニュース2003] [SideMenu] [FAQ] [FrontPage]