@nekomatuです。
実はどうレスをつけるか悩みあぐねいていいやと諦めていましたが、 hermit4さんが適切な反応をされており安堵致したところです。
QPainterはプリミティブなクラスだからそのレイヤーではダブルバッファしていないんだろうなぁと妄想しましたが、 正しかったようです。その辺り、どう調べるのが良いのか?というのは少し経験値的なものが必要だと感じました。 (私はプログラマーではないため、経験値が乏しいのです)
気になって私も調べたのですが、 検索の仕方としては"qt double buffering"では情報が古そうなものが出てきてしまってよろしくなかったです。 "qt5 double buffering"で検索すると、トップに次のドキュメントがヒットし情報量が豊富でした。 http://doc.qt.io/qt-5/qwidget.html#transparency-and-double-buffering
Qtの検索に関しては"qt5"をキーワードにする。というのが、勉強会での雑談でもよく言われるベストプラクティスの1つです。 古いバージョンの4系を調べる時は"qt4" をキーワードにすると良いようです。
ではでは。
2017年2月13日 23:52 Shingo Ishida hermit4loop@gmail.com:
hermit4です。文中に回答します。
QPainter::drawImageでは、ダブルバッファはされないのですか。。。 てっきりQtはダブルバッファがデフォルトだと思っていました。
上位のQWidgetが必要に応じてやるから、下位のQPainterではやって ないというだけで、自力でがりがりと書く必要がないアプリなのであ れば、QLabel::setPixmapあたりを使う方が楽なのではないかと思いま す。
指摘通りX11経由で描画していると思われます。QWS(Qtのウインドウズシステム?) では、ちらつきは起きませんでした。しかし、描画がかなり遅かったため、 現在はXシステムを用いてアプリを作成しています。
よろしければ、ダブルバッファやGPUの使い方など、サイトのリンクだけでもよいので ご教授のほどお願いできませんでしょうか?
画面がちらついているということは、多くの場合は、人の認識できる速度 で描画途中の何かが表示されているという事なので、描画過程が気になら ないように画面描画全体の速度向上を目指す(GPU等で早くする)か、描 画過程を隠すため先にバッファに描きつけてから描画する(ダブルバッ ファリング)かが、まず思いつく対処方法というだけです。両方の対策を 同時に行う必要はないです。ご理解いただいてるとは思いますが、念の ため。
GPUアクセラレーションの話は、Xの設定やドライバの話が先ですから、 まずはボードメーカーなり、Linuxを載せた所なりに問い合わせてみる とか、ボード上で有効か否かなど色々調べてみた方がよろしいかと。 他にも、描画速度を上げる方法としては、drawImageは重い処理なの で、paintEventより前に描画対象の画像だけでもQPixmapにしておい て描画時にdrawPixmapを使うだけでもずいぶん違うかと思います。
ダブルバッファリングについては、QWidget系を使うのでなければ、ご 自身で実装する事になります。だいぶ古い書籍ですが、オライリーから 出ている「入門Qt4プログラミング」の5章にQWidgetを自分でダブル バッファリングする方法の解説があるので参考になるところはあるか と思います。
このあたりは、アルゴリズムや実装の領域ですので、職業プログラマが 仕事でという事ですと、本来、質問や相談を持ちかけて良いのは社内の 先輩や同僚といった範囲までかと思います。Webでの情報が欲しいので あれば、ご自身の責任で探して下さい。
Qtに限って職業倫理に反しないだろう範囲でお答えしましたが、画面の ちらつきは、実装したコードから無駄な白塗りや画面クリアの1行を削 除すれば収まるケースから、組込みともなると、実はフレームバッファ が2本あってドライバ側で切り替えながら使われていたけど、片方がシ リコンバグで腐ってて高負荷だとノイズが乗るのでちらついて見えてた なんて、底の底の方で起きてる罠にハマってる時まであるので、簡単に 解決できるかは場合によりけりです。
質問に直接回答していないところもありますが、ヒントは色々ちりば めたつもりですので、なんとか無事に解決できるよう頑張って下さい。 _______________________________________________ Qt-users mailing list Qt-users@qt-users.jp http://qt-users.jp/mailman/listinfo/qt-users