• [soccerwindow2] Qtへ移行中.その9 (akiyama) 02:33:55

QUdpSocketを使ったパケットの送受信に成功した. QSocketNotifierを使うことで,パケットの受信をイベントとしてキャッチすることにも成功. wx版とは違って完全にイベントドリブンでいけそう.

ただ,送信時に毎回アドレス情報とポート番号を指定しなければならないのが気持ち悪い. UDPってこういうものなような気もするけど,何だかなぁ. 自前のUDPSocket + QSocketNotifiereの方が使い勝手が良さそうだ. でも,それだとWindows環境に対応できないかもしれないのか. 困ったな. もう少しスマートに書けないか調べてみよう.

一応通信は出来てるから,今日中にはモニタとしても動作させられそうかな.デバッグサーバまでいければいいけど.

こんなことをやってたらもう2時半か. また睡眠不足だよ….

  • [soccerwindow2] 高速化に向けて 10:23:59

描画用の書き込みバッファをどのように管理しようかと考えていたけど,QPixmapCacheなどという便利なものがQt側に用意されていた.
http://doc.trolltech.com/qq/qq12-qpixmapcache.html

描画速度の問題も,これで何とかなりそうかな. というか,QPainterのページにQPixmapCacheの情報へのポインタを用意しておいてよ.すぐには気付けないって.

  • [soccerwindow2] Qtへ移行中.その10 (akiyama) 23:04:40

サッカーモニタとしては一通り動作するようになった. 既にログプレイヤとして動いていたので,パケット受信のイベントを追加するだけで簡単に完了. ドロップボールなども整備した.

ただ,ソケットイベントの取扱いがいまだ不完全.QUdpSocketを使うと,ソケットのファイルディスクリプタとQSocketNotifierとの接続をライブラリ側で行ってしまうようだ. この接続を独自にやってしまうと,以下のような警告メッセージが出る.

QSocketNotifier: Multiple socket notifiers for same socket 9 and type read

このメッセージが出たとしても,一応メッセージ受信をイベントとしてキャッチすることは出来るようで,モニタクライアントとして動作することは出来ている. しかし,こんな警告メッセージを放っておける程ずぼらな性格でもないので,何とかしようとしているところ.

要は,ライブラリ側で自動登録されるQSocketNotifierによるシグナルをキャッチできるようになれば良い訳だ.QIODevice::readyRead()がそのシグナルに対応するはずなんだけど,何故か動かないので,Qtのソースを解読中.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-03-14 (月) 14:51:37 (1920d)
SourceForge.JP
Creative Commons License
RoboCup tools by Hidehisa Akiyama is licensed under a Creative Commons 表示-非営利 2.1 日本 License.