問題タブ [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.
c++ - QPaintが何も描画しない
Qt プログラムの中で最も基本的なもの、つまりメイン ウィンドウがあります。QPainter を使用していくつかの線を描画できるようにしたいのですが、実際には線にすぎません (ヒストグラムをプロットしようとしています)。とにかく、コード例を読みましたが、何らかの理由でコードが機能しません。
私は示していない MainWindow というクラスを作成するmainwindow.uiを持っています - それはQWidgetを持つQMainWindowですが、今は使用していないのでQWidgetを非表示にしています。main.ccは、小さなプロジェクトの標準のmain.ccであるため、表示されません。コードの残りの部分は次のとおりです。
メインウィンドウ.cc
メインウィンドウ.h
qt - QWidgetでのQPaintPath描画アルゴリズムのカスタマイズ
QPainterPathの描画アルゴリズムをカスタマイズするにはどうすればよいですか?
表示されている要素のみをペイントして、アプリを高速化したいと思います。
QPainterPathからリアルタイムプロットを描画していますが、これを実行したいと思います。
- QPainterPathの左端に表示される要素の二分探索。
- QPainterPathの右端に表示される要素の二分探索。
- 表示されている要素のみを描画します。
QWidgetのQPaintEngineを。でカスタマイズする必要があると思いますQWidget::paintEngine()。
しかし、QPaintEngine::drawPath(...)デフォルトの実装は何もしません。
私は正しいですか?
アップデート:
復活してくれてありがとう、Koying。
私はちょうどこの方法を試しました:
すべてうまくいきます!要素数の時間オーバーヘッドを固定しました。
私のコードをスピードアップするための提案はありますか?
UDPATE:
QPainterPathを読み取り、別のスレッドから要素を追加しているときにエラーが発生しました。コールスタックでアプリがクラッシュすることがあります。
QtCored4.dll!qt_message_output(QtMsgType msgType、const char * buf)2240行目C ++ QtCored4.dll!qt_message(QtMsgType msgType、const char * msg、char * ap)2298行目+0x12バイトC++ QtCored4.dll!qFatal(const msg、...)行2481+0xfバイトC++QtCored4.dll!qt_assert(const char *アサーション、const char *ファイル、int行)行1999+0x16バイトC++QtGuid4.dll!QPainterPath :: elementAt(int i)行405+0x36バイトC++MyPlot.dll!MyPlot :: paintEvent(QPaintEvent *イベント)行172+0x13バイトC++
elementAt(i)を呼び出している間、i == 4303であり、5459個の要素があります。
たぶん、要素数はクラッシュの瞬間には現実的ではありませんか?
最初のスレッドがクラッシュしているときに、2番目のスレッドが要素数を変更できますか?
これが私のスレッドの仕組みです:私のGUIスレッドは読み取り専用メソッドのみを使用します。私の2番目のスレッドは、1秒あたり1〜5千ポイントを追加します。
qt - QListWidget にある QPixmap のペイント
QListWidget に QListWidgetItem のリストがあります (アイテムの数が膨大なため、Hor スクロール バーがあります)。各 QListWidgetItem には QPixmap がデータとして含まれています (ランダムな値に縮小されています)。私の要件は、強調表示する必要がある QPixmap をクリックしたときです (ブラシ幅 10 の丸みを帯びた四角形)。各 QListWidgetItem を QItemDelegate に委任しています。ここでいくつか質問があります。
対応するQListWidgetItemが選択されているときにQPixmapの丸みを帯びた四角形をペイントする方法は?
上記のペイント イベントは、QPixmap がクリックされたときに発生する必要があります (QListWidgetItem の他の部分では発生しません)。QPixmap はサイズが異なるため、QListWidgetItem の QPixmap の上部と下部は空になり、そこをクリックすると ItemDelegate もトリガーされます。この選択を取り除く方法は?
qt - QListWidgetのQItemDelegate内でペイントしながらQPixmapを中央に配置する方法
QListWidget の QItemDelegate 内で QPixmap をペイントしています。各 QListWidgetItem は異なる次元です。内部
QItemDelegate の関数として、QListWidgetItem 内の中央揃えで QPixmap をペイントしたいと考えています。option.rect() は、中心位置を計算してそれに応じてペイントできるアイテムのジオメトリを提供しますが、この配置のより良いアプローチを知りたいです.誰かが私に答えを教えてもらえますか?
c++ - QPainter オブジェクトを破棄するにはどうすればよいですか / drawText() メモリ リークを取り除きますか?
大規模なアプリケーションのメモリ リークを削減しようとしています。valgrind を使用すると、クラスのdrawText()関数を呼び出すときにメモリ リークの多くのインスタンスも確認されました。私が読んだいくつかの情報源によるQPainterと、それはバグである可能性がありますが、ドキュメントにあるように、オブジェクトを破棄することでそれを取り除くことができるのではないかと考えていました->「描画後にオブジェクトを破棄することを忘れないでください。」QtQPainterQPainter
- それを行う正しい方法は何ですか?
drawText()リークの原因となるvalgrind ログの 1 つのインスタンスを次に示します。
qt - drawLine の使用時に欠落しているピクセルをトレースする方法
qt で画像を描画するには、qpainter が使用されることがわかっています。最近、私は drawLine() 関数を使用して、ユーザーが落書きしているものを何でも描画しました。これは、lastPoint と currentPoint を mouseMoveEvent から drawLine() を実装するカスタム関数に渡すことによって行われました。以下に示すように、そのカスタム関数の引数を渡しました。
qDebug() の助けを借りて、描画中に一部のピクセルが欠落していることに気付きましたが、描画は正確です。qt-painting のソースを調べたところ、drawLine() が drawLines() を呼び出していて、qpainterPath を使用して画像に図形を描画していたことがわかりました。
私の質問は、これらの「見逃された」ピクセルを追跡する方法や、描画されたすべてのピクセルを見つける方法はありますか?
ありがとう!
qt - 同じ QPen 幅の QGraphicsScene で線幅が異なって見えるのはなぜですか?
QPainterこのコードでa を使用してウィジェットを描画します。
このアイテムを に追加するとQGraphicsScene、特にズームインすると、線の幅が互いに異なって見えることがあります。なぜこれが起こっているのか、それを修正するために何ができるのか説明できますか?
このスクリーン ショットは、問題を示しています。

qt - QPainter::drawImage (QPoint が (0,0) でない場合)
QPainter::drawImage に問題があります。VNC サーバーにアプリにアクセスするための KameleonVNC ウィジェットがあります。そして、私はそれをQFrameに入れました。しかし、それは私が好きではない左上隅に画像を描いています。コードを見て、VNCサーバーからの画像が座標0,0でQPainter::drawImage、QPoint(0,0)またはQRect座標0,0で描画されているのを確認しました。しかし、座標を別のものに変更すると、予測できない結果が得られました。絵が変わったところだけ小さな絵を描いていると思います。しかし、drawImage でこのバグを修正する方法がわかりません。
nokia - Nokia N9 の Qt アプリケーション -- アンチエイリアスの描画が機能しない
Nokia N9 用のアプリを開発しています。描画する必要があるため、QWidget から継承したクラスを使用し、paintEvent では QPainter を使用して線を描画します。
動作しますが、ラインはデバイスでエイリアスされ、シミュレーターでアンチエイリアスされます。
setRenderHints はまったく機能せず、効果がないようです。
テキストはエイリアス化されていますが (drawText)、行はエイリアス化されていません。私が行った場合:
テキストは N9 でもエイリアス化され、シミュレーターではエイリアス化されません。私は立ち往生しています。
performance - Qtでスクロール中にちらつきを感じないようにする方法は?
Qtフレームワーク(4.7.4)を使用して、新しいピクセルデータが画面の最初の行に追加され、前のピクセルが更新ごとに1ピクセル下にスクロールされるスライド表示を実証しようとしています。
1 秒あたり 20 回更新され、更新のたびにランダムな緑色の点 (ピクセル) が黒い背景に描画されます。
問題は; リフレッシュするたびにちらつきが非常に目立ちます。Web で調査し、コードを可能な限り最適化しました。QPainter (QWidget 上) と QGraphicsScene (QGraphicsView 上) の両方でラスター レンダリングを使用しようとしましたが、QGLWidget で OpenGL レンダリングを使用しようとしました。ただし、最後にはまだ同じちらつきの問題があります。
このちらつきの原因は何ですか? LCD モニターが、黒から緑への遷移のためにディスプレイをリフレッシュできないのではないかと疑い始めました。また、黒の代わりに灰色の背景を選択すると、ちらつきが発生しないことにも気付きました。