SSブログ

ペンの追随の実装 [NetWalker]

さて、めちゃくちゃ長かったですが、ようやく実際の実装を行っていきたいと思います。とりあえずは、「qtlcanvas.h」と「qtlcanvas.cpp」に残りのマウス関連のイベント(「mouseMoveEvent()」と「mouseReleaseEvent()」)を追加します。

だいぶ慣れてきたと思ってましたが、コードを入力し始めると、NetWalkerのキーボードの悪さが目立ちますねぇ・・・。また、慣れるかなぁ・・。また、Qt Creator のエディタが遅い上に、ときどきフリーズしてしまいます。なので、前回設定した通り外部エディタを使っていますが、この外部エディタの立ち上げがいちいち面倒ですね・・。やっぱり、Qt Creator のエディタを使いたいです・・。

ちなみに、追加したコードはこんな感じ。

10050400.png
とりあえず、デバグコードのみ


で、ビルド&実行。・・・無事、動作しました。

10050401.png
ちゃんとログが出てます


さて、ちゃんと実装しますか・・。QPainterの使い方は以前大雑把に触れましたが、実際に実装してみると、ちゃんと線が引けませんね・・。一瞬、線が出てきてるんですが、すぐに消えてしまっています。しかも、やたらと実行時エラーが出ています。

実行エラーについては、painterをend()させ忘れていたので、それをすることで解決。一方、一瞬出て、すぐ消えると言うのは、描画をするたびにQWidgetが一から書き直されているための様ですね・・。これ、どうすればよかったですかねぇ・・。昔書いたソースを見てみたら、paintEvent()では、全ての描画をやり直してます・・。描画についてはこんな感じかな・・。

10050402.png
多分こんな感じ


ちなみに、たしか、レイアウトなども paintEvent() のタイミングで動作したと思うので、QWidget のサイズをレイアウトに任せている場合は、レイアウト後にサイズを取るために、resizeEvent()でサイズを取得する必要があります。

ちょっと、考えなおしが必要ですね・・。データを保持するクラスを作成して、widgetからはそちらにペンの位置などを指示するだけにします。

さて、編集します。NetWalker画面が広いので便利です。エディタが2枚開けます。

10050403.png
ヘッダを見ながらコーディング


オフスクリーンにQPixmapを使って、いろいろとRubyとC++の違いに戸惑いつつ、ビルドエラーを取っていったところ、何とかペンの軌跡の追随はできるようになりました。

10050404.png
まあ、描けましたが・・。


でも、遅いですね。イベントが発生するたびに全画面を描き直ししているので、仕方ないところでしょうか・・。更新された部分のみの描き直しで高速化できるのか・・。それとも根本的にやり方を変える必要があるのか・・。ま、最適化はおいおいやっていきましょうか・・・。







nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

ブログを作る(無料) powered by SSブログ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。