問題タブ [qpainter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
4364 参照

c++ - QPainterで描く

で描く必要がありますQPainterが、やろうとすると

エラーが発生しました:

QPainter :: setPen:ペインターがアクティブではありません

QPainter :: setBrush:ペインターがアクティブではありません

QPainter無効にしないで使用できますpaintEvent( QPaintEvent* )か?

ありがとうございました。

0 投票する
3 に答える
15106 参照

qt4 - QImageまたはQPixmapを半透明にする方法-またはsetAlphaChannelが廃止された理由

4.7そしてqgraphicsviewに2つの画像をオーバーレイしたい。上の画像は、透けて見えるように半透明にする必要があります。最初、両方の画像は完全に不透明です。各ピクセルのグローバルアルファ値を設定する関数が存在することを期待していましたが、そのような関数はないようです。これに最も近いのはQPixmap::setAlphaChannel(const QPixmap&alphaChannel)ですが、Qt-4.6以降は廃止されたとマークされています。代わりに、マニュアルではQPainterのCompositionModesについて言及していますが、不透明な画像に必要な透明度を追加することに成功していません。誰かが私に実用的な例を示したり、コードを共有したりできますか?

編集: 質問をしてからほんの数時間後に、自分の答えを持って申し訳ありません。この記事から、次のコードがその役目を果たしていることがわかりました。アルファ値をピクセル単位で変更するよりも、これが「より良い」(多くの場合、より高速に変換される)と見なされるのではないかと思います。

0 投票する
1 に答える
534 参照

fonts - qpainterpath.addtextはqfontの重みを無視します

Qt 4.7.0を使用すると、通常と太字の中間に表示するテキストが必要になります。これが私たちがしていることです:

Paintのサブクラスのメソッドには、QGraphicsObject呼び出すものQFontがありsetWeight(58)ます。を作成してQPainterPathそのメソッドを呼び出しaddText、を渡しますQFont

次に、QPainterパラメータを使用してを呼び出しdrawPath、を渡しますQPainterPath

私たちが見つけたのは、fontweightを50から62に変更しても、ペイント方法に違いはないということです。フォントの太さは63〜75で、フォントは太字で描かれています。

fontWeightを期待どおりに機能させるにはどうすればよいですか?

0 投票する
2 に答える
9937 参照

qt - シェーダーを使用するときにQGLWidgetでOpenGLを介してQPainterを使用する

Qt(特に4.6)ユーザーの多くは、OpenGLチュートリアルで提供されているオーバーペイントの例に精通しています。私は非常に似たようなことをしようとしていますが、古い固定関数パイプラインの代わりに、純粋なOpenGLデータにシェーダーを使用しています。

私は3Dアセットアプリケーションを構築しているので、グリッドのものです。動作するタイミングを明確にするために、ウィジェットの左上隅に大きな赤い長方形が表示されますが、表示されません。

3Dは正常に機能しますが、QPainterは画面に何も表示しません。私とドキュメントの間で私が見ることができる唯一の本当の違いは、すべての射影と変換行列の計算が他の関数に隠されてから、glUniformを介してシェーダーにアップロードされることです。おそらく、QPainterが2Dアセットを三角形に分割するとき、これは、QPainterのシェーダーが投影/変換行列にアクセスできないことを意味します。そのため、赤い三角形が描画され始めますが、おそらく画面外のどこかにあります。

0 投票する
1 に答える
21345 参照

c++ - QPainter がアクティブでない

次のコードでは、一連のエラーが発生します。

エラー:

このエラーを解決するにはどうすればよいですか?

0 投票する
2 に答える
2115 参照

c++ - QGradientの作成

今、私はグラデーション塗りつぶしで円を作成しようとしています:

しかし、これで達成できるのは、完全に白い円を表示することだけです。どうすればこれを修正できますか?

0 投票する
1 に答える
1182 参照

c++ - QT C++ で VideoWidget paintEvent() をオーバーライドできません

Phonon ライブラリから VideoWidget に図形を描画しようとしていますが、paintEvent() メソッドをオーバーライドできません。

次のようにメソッドを実装しようとすると:

このエラーが表示されます: クラス 'Phonon::VideoWidget' で宣言された 'void Phonon::VideoWidget::paintEvent(QPaintEvent*)' メンバー関数がありません</p>

そこで、保護されたメソッド paintEvent を使用して myVideoWidget ヘッダーを作成し、次のように mainwindow.cpp に実装することにしました。

プログラムは実行されますが、何も描画されないか、「repintando」メッセージが表示されます。

誰でも私を助けることができますか?私は何を間違っていますか?

どうもありがとうございました!

0 投票する
4 に答える
10794 参照

qt - ウィンドウ/ビューポートを使用して QPainter y 軸を反転する

Qt 4.7 QPainter を使用して、ポリゴンなどをウィジェットに描画しています。(0,0) がウィジェットの中心になり、x/y 軸が標準的な「デカルト」の方法で動作するように座標系を変更したいと考えています (つまり、y は「上」に行くほど増加し、「」に行くほど減少します)。下")。つまり、座標を「コンピュータ グラフィックス」ではなく「数学」のようなものにしたいということです。:-)

自分で計算するのではなく、 setViewport() と setWindow() を使用してこれを実行しようとしています。描画メソッドを自分の座標で直接呼び出すことができると便利だからです。

ここに私がこれまでに持っているものがあります:

これで問題なく動作し、画面の中央に素敵な青い四角形が描画されます。問題は、左上隅が (-10, -10) であると言わざるを得ないことです。私はそれを(-10、10)にできるようにしたいと思います。それはデカルト座標でのことです。

この「y軸反転」を取得するためにsetWindow/setViewportをいじってみましたが、役に立ちませんでした。これは本当に簡単で基本的なことのように思えますが、Qt ドキュメントと Web を精査した後、私はそれを理解できません!

ありがとう、
クリス

0 投票する
1 に答える
3700 参照

qt - Qt QPixmap QPainterの問題

次のコード行を含むコードがあります。

コードを実行すると、黒い四角形の白い画像が表示されません。実際、私が見ているのは、大きなフォントで書かれたウィンドウのタイトルです。何も機能していないようです。そのようなイメージが得られます。私は何を間違っていますか?

ありがとうございました!

0 投票する
1 に答える
950 参照

c++ - QGraphicsItem::paint() が印刷のために呼び出されていることをどのように伝えることができますか?

QGraphicsItem大きな (数百 MB の圧縮されたマルチチャネル) 画像を表示するカスタムがあります。現在、かなりうまく機能しています。

アイデアは、現在のビュー スケールとグラフィックス ビュー ポートに必要なスキャンラインのみをロードすることです。そして、ディスプレイを別々のスレッドで構築されたタイルに分割します。このpaint()関数は、タイルを構築して QThreadPool に供給するだけです。また、完了したタイルをチェックして描画します。スレッド/ランナブルとアイテムの間のイベントを処理するコードがさらにあります。しかし、これは基本的な部分です。

目標は、レスポンシブ UI を提供することです。アイテムがそれ自体を更新している場合、UI はブロックされません。印刷方法を理解しようとするまで、すべてうまくいきます。

問題は、ペイント関数への特定の呼び出しが、画面上の更新ではなく印刷の結果であることを知る必要があることです。これは、すべてのタイルが完了してペインターにプロットされるまでメイン スレッドをブロックするために必要です (または、paint() がすぐに戻るため、印刷されたページは空白になります)。

プリンターは画面よりも解像度が高いため、サンプルレートを調整するのにも役立ちます。

したがって、私の質問は次のようになります: my に渡されたがスクリーンまたはプリンターであるかどうかを確認するにはどうすればよいですか。いっそのこと、呼び出しが印刷プレビューか実際の印刷かを判断できますか?QPainterpaint()

ありがとう。