問題タブ [qpainterpath]
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++ - 印刷時に QPainterPath テキストが正しくレンダリングされない
Qt 5.4.2 では、QPainterPath
テキストをレンダリングするために を使用しています。これは、テキストが文字に分割され、各文字が曲線に沿ってレンダリングされる可能性があるためです。プラットフォーム間および印刷時に異なる結果が表示されます。テキストをレンダリングするために、とメソッドQPainter
を使用してみました。drawPath()
drawPolygon()
OS X 10.11.6:
drawPath
: インド語のテキストの一番上の行には、印刷時と印刷時の両方で、あってはならないギャップがありQGraphicsView
ます。drawPolygon
QGraphicsView
: 一番上の行は、印刷時と印刷時の両方で、あるべき姿でしっかりしています。ただし、印刷すると、テキスト内のさまざまなランダムなポイントの間に極細の線がたくさん表示されます。
ウィンドウ 7:
drawPath
: Mac と同じ: とQGraphicsView
印刷時の両方で、一番上の行にギャップがあります。drawPolygon
: これQGraphicsView
は正しい (ギャップなし) ですが、Mac で印刷したときのように極細の線はありませんが、印刷するとまだ上部の行にギャップがあります。したがって、 を使用して印刷するとdrawPolygon
、 を使用して印刷した場合と同じ誤った出力が生成されますdrawPath
。
これらの問題を示すサンプル アプリを次に示します。QGraphicsItem
サンプル アプリのサブクラスのペイント コードは次のとおりです。
QGraphicsItem
シーンを作成し、2 つのサブクラス オブジェクトをシーンに追加するサンプル アプリのコードを次に示します。
QGraphicsView
レンダリングされたものと印刷されたものを同一で正しいものにするにはどうすればよいですか? OS X と Windows で異なるソリューションが必要な場合でも、問題ありません。または、これを解決するために Qt の新しいバージョンが必要な場合は、Qt をアップグレードできます。
アップデート:
Kuba Ober が示唆したように、以下のこの単純なアプリで印刷のバグを示しました。ここから先に進む方法がわかりません。
c++ - QTで複数の点を通る滑らかな曲線を描く方法は?
QT で一連の点を通る滑らかな線を描く方法はありますか? ポイントの数と位置は実行時に設定されます。
現在、パスを作成して、ポイントからポイントへの lineTo を含む QPainterPath を描画します。render-hints アンチエイリアシングを使用していますが、パスはまだギザギザです。
この種の曲線パスを提供するように見える QSplineSeries を見てきましたが、私が使用している QT バージョンである Qt4.8 では利用できません。
頻繁に提案されている別のオプションは、ベジエ曲線を使用することですが、それらは 1 つの開始点と終了点、および 2 つの制御点を使用するため、すべてのセグメント (すべての lineTo) に対して計算し、何らかの形で私が持っていない制御点を計算する必要があります。この時点で。
c++ - QPainterPath サブパスを別の色にするにはどうすればよいですか?
タイトルが示すように、QPainterPath のサブパスを QGraphicsPathItem に適用されるさまざまな色に色付けする方法を探しています。または、QGradient QPen を使用して PathItem に沿って色を変更するだけです。
最終的に、外部変数に基づいて色を変更する単一の線を視覚的に描画できるようにする正しい解決策を見つけようとしています。
QGraphicsScene を使用してすべてを描画しています。
私の現在のソリューションでは、複数の QGraphicsPathItems を作成し、それぞれの QPens でそれぞれ異なる色を付けています。データを取得すると、それらの PathItem に関連付けられた PainterPath に値を入力します。これにより、必要な多色の線が得られますが、線が目に見えて切断されています。
色の変更中に QPainterPath のサブパスを非表示にするか、単一の PathItem に適用されるグラデーションを変更できるようにする必要があります。または、私が見逃している別のアプローチがあるかもしれません。どんな助けでも素晴らしいでしょう。
-編集:
私の質問の解決策に記載されているように、これは私が現在描画を行っている方法です。ここでも、GraphicsScene を使用していることに注意してください。
GraphicsScene でのベアリング式の計算により、不規則な結果が生成される
ご覧のとおり、線は外部変数によって描画されると色が変わります。線が常にまっすぐであるとは限らないため、Qgradient が機能しない可能性があります。色は線に沿って流れる必要があります。
何が起こっているかは次のとおりです。
ご覧のとおり、赤い線 (PathItem) は、最後に表示されていた場所から新しい位置にジャンプします。
動作をより明確にするために、この線が時間の経過とともに描かれていると想像してください。赤で始まり、すぐに変数が設定され、描画される線分の色がオレンジに変わります。線の赤い部分は元のままなので、変数がその時点でどのような状態であったかを歴史的に見ることができます。さまざまな時点で、変数が調整され、それに応じて線の新しい部分に適用される色が更新されます。
線の描画が終了したら、それを見て、色がいつ変化したかを確認できます。
これがすべて理にかなっていることを願っています。