SSブログ

QPainterの派生クラスの作成 [Qt]

さて、実際に実装していきたいと思いますが、まずは、QPainterのどの関数が呼ばれるのかを調べるために、各メンバ関数が呼ばれた時にログを出すだけとしたいと思います。戻り値が必要なものについては、個別に検討します。

ログ出しには、以前試した「qDebug()」を利用します。調査の後、呼ばれているものから順に処理を考えていくことにします。データのロードタイミングをどうしようか悩みましたが、とりあえず、canvasがリサイズされるときにロードすることにしました。かなり乱暴ですけどね・・。この辺、処理フローをちゃんと考える必要がありますね。

*

コンパイルしたところ、エラーがでました。まずは、「boundingRect ( const QRectF & rectangle, const QString & text, const QTextOption & option = QTextOption() )」・・・。あ〜、クラスの宣言のところにデフォルト値の指定が書かれていますね・・。Qtのリファレンスの所をそのままコピーしたので、こういう事になってました。これは取り除く必要がありますね。他にもありそう・・。検索してみると結構ありましたので、修正しときました。

次は「CompositionMode compositionMode () const」ですね。「CompositionMode」が型名じゃないとか・・。調べたところ、「enum QPainter::CompositionMode」と言うQPainter内の列挙型の様です。とりあえず、関数の型名の前に「QPainter::」をつけることに・・。これって、namespaceとかが使えるんですかね・・?namespaceって、なんとなくわかりますが、いまいち使い方がわかってなかったりするんですが・・。

次は「RenderHints renderHints () const」です。これも先程のものと同様ですね。でも説明には列挙の「enum」以外に「flags」と言うキーワードも使われてますね。「flags」って知らないんですが・・。

*

修正した後、ビルドが通ったので、実行してみましたところ、データ変換用に今回用意した「QtlSvgInternalDataConv」と言うクラスのコンストラクタが呼ばれた後に「QPainter::save: Painter not active」と言うエラーが表示されました・・。

QPainter::save: Painter not active


この「save()」って、誰が呼んでるんですかね・・。しかも作成したクラスではなく、元クラスのQPainterのものが呼ばれているようです・・。

*

どうも、「QSvgRenderer::render()」の中で呼ばれている様です。そういや、この関数を呼ぶ前に変換クラスをbegin()していませんでした。その際にQPaintDeviceを渡す必要があります。ここは、QtlDrawDataで保持しているcanvas(QPixmap型)を渡すことにします。

・・結果は同じですね。元クラスの「QPainter::begin()」をなんとか呼ぶ必要があるのでしょうか?? 一々元のQPainterとの絡みが出てくるとすると、この計画はダメですね・・。

親クラスの関数はどう呼べばいいのか調べていたときに思いついたんですが、もしかしたら、QSvgRendrerで勝手に親クラスの「save」を呼んでる?? そう言えば、親クラスとサブクラスの間の関数の呼び出し規則ってどうだったんでしたっけ? C++の基本中の基本だと思いますが、これは押さえとかないとやってることが全く無駄になってしまいますね・・。と言うより、この方法はダメな気がしてきました。


つづく。



   

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

nice! 0

コメント 0

コメントを書く

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

トラックバック 0

constメンバ関数VYM ブログトップ
ブログを作る(無料) powered by SSブログ

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