問題タブ [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 投票する
3 に答える
1864 参照

c++ - Qt で QWidget の周りにオブジェクトをドラッグする

オブジェクトのドラッグをサポートする Qt Creator でカスタム ウィジェットを作成しようとしています。最も単純な形式では、ウィジェットには QRect (またはその他の形状) があり、これをクリックしてウィジェット内でドラッグできます。マウス ボタンを放すと、QRect のドラッグが停止します。

QWidget クラスには、このメソッドがあります

ポインターが画面上を移動すると、マウスの座標を取得できます。x と y のメンバー変数を更新してから、paintEvent メソッドを使用して QRect をペイントしようとしましたが、うまくいきません。

誰か提案はありますか?

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

qt - OpenGL VAO/VBO/などの共有。QGLWidget経由

QGLWidgets の 3 レイヤー階層を使用して、CAD のようなアプリで 5 つの OpenGL ビューポート間でシェーダーと頂点データを共有しています。ルート コンテキストはアプリケーション全体のシェーダーをコンパイルするために使用され、ドキュメントごとのコンテキストはモデルの頂点データを共有するために使用され、ビューポート コンテキストは実際にレンダリングを行うものです (グリッド頂点データやその他のビューポートごとのものも含まれます)。

シェーダーの共有は正常に機能しているようで、グリッドの描画も同様ですが、頂点データの共有に関しては失敗し、正直に言うと、どのように機能するのかわかりません...

モデル コンテキストが最新の状態でアイテムの 3D アイコンを作成しました。これは、'name' が 1 の最初の VAO であったためです。 )が現在であるため、VAO 1が呼び出されますが、描画されるのはビューポートのVAO 1です-私の素敵な赤いグリッドの中心線。OpenGL コンテキストは共有できますが、名前が一意ではないため、各アイテムが属する「名前空間」をどのように指定できますか?

モデル VAO が呼び出される直前にモデル コンテキストを最新のものにしようとしましたが、適切な VAO もビューポートも描画されません。

これは私には非常に基本的なことのように思えるので、何か愚かなことをしているに違いありません - 何か提案はありますか?

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

c++ - Linux 用の c++ 2D プロット ツール

Linux用のシンプルなc ++ 2dプロットツールを探しています(より正直なところ、「クロスプラットフォーム」)。

「koolplot」は素晴らしいですが、そのコードにはgraphics.hとwindows.hが含まれているため、Windows専用だと思います。

誰かが Qt の QPainter を提案しましたが、それを使用して 1 つのポイントを描画することさえできません。:'(

したがって、他のプロット ツールや Qt の QPainter に関する適切なチュートリアルに関するヘルプがあれば、非常に感謝しています。

ありがとう。

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

c++ - QtConcurrentを使用してPixmapをロードし、ペイントします

タイルレンダリングプログラムを作成しようとしています。ここにいくつかの基本的なコードがあります。

ヘッダ

CPP:

大きな画像のタイルをQGraphicsSceneに貼り付けるアプリケーションを作成しようとしています。ただし、すべてのタイルを一度にロードするには時間がかかり、多くのメモリを消費します。したがって、QGraphicsItemをサブクラス化し、ペイントをオーバーライドしています。QGraphicsItemクラスのpaintメソッドは、QGraphicsView内に表示されたときにのみ呼び出されます。したがって、ペイント内にタイルをロードすることで、基本的に、タイルが表示されたときにのみタイルをロードするアプリケーションを作成できます。これだけは今のところ機能しています。

ユーザーエクスペリエンスを向上させるために、QtConcurrentを使用して、別のスレッドでタイルをロードしてみます。これが私が行った変更です。

CPP

LoadTilePixmap関数:

このコードは機能するはずですが、ペイントが呼び出されるとすぐに実行時にクラッシュし続けます。temp->tileItem->paint(painter,option,widget);ブレークポイントを追加した後、クラッシュの原因となる問題を絞り込みました。

私が得る出力は

誰かが私を助けて、lastline /paintメソッドがクラッシュする理由を教えてもらえますか?どうすれば修正できますか?

変更を更新するために編集されたコード

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

c++ - Qline 座標を QPainter ウィジェットに送信する方法

親ウィジェット MainWindow で作成されたデータの配列に基づいて線を描画する Qwidget Form_temp を作成しました。私が直面している問題は、スロット send_data を介して MainWindow から Form_temp に送信したデータが、Form_temp の他の関数によって認識されないことです。(ペイント イベント)。

抜け穴がわかりません。データが Form_temp に到着することを検証するために、いくつかのデバッグ ポイントを追加しました。

ここにコードといくつかの説明があります。私は QTCreator でこれを行いました。助けてください。これに数日を費やし、先に進むことができません。

別の質問: paintEven は、ユーザーがマウスを動かしたり、別のウィジェットがビューを更新したりするたびに発生します (たとえば、時間を示すラベルがあります)。QPaintevens をフィルタリングしたいのですが、データが変更されたときに更新したいだけです。私がコード化したものよりもこれを行うためのより良い方法はありますか?

Qwidget : ヘッダー

Qwidget : コア

MainWindow: ヘッダー

MainWindow: コア

読んでくれてありがとう。セバスチャン。

0 投票する
0 に答える
419 参照

c++ - Qt: 複雑なコンテンツのスクロール。ウェブブラウザエンジン。テキストの選択

アプリケーションのような Web ブラウザー内で複雑なコンテンツをスクロールすることに興味があります。Qt と C++ を使用しているとします。これは「どのように」という質問ではなく、「どのように機能するか」というようなものですか? 完全に私の好奇心の不合理な質問から導き出されたものです。

小さな実験をしました。

  1. 800x60000 px の大きな QWidget を作成しました。
  2. QPainter を使用して自分自身をペイントする 300 個の QWidgets 800x200 px を追加しました。paintEvent() が呼び出されると、各ウィジェットは固有の名前をコンソールに出力します。
  3. (1.) QScrollArea 800x800 に追加。
  4. スクロールすると、画面に完全に表示されていないウィジェットのみが再描画されることに気付きます。一度に 1 つのウィジェットのみです (シーン: http://savepic.ru/2670640.jpg )。したがって、QScrollArea (または QWidget? 誰がどのウィジェットを再描画する必要があるのか​​?) はスマートです。300 個のウィジェットすべてを常に再描画するために CPU をロードしたり、800x60000 ピックスマップ (-;

マウスを使用して、「Web ページ」のテキストやその他の要素を選択するとします。だから私はそれらを(背景を変えることによって)マークできるようにしたい。どうすればそれを実装できますか? どのように異なる Web ブラウザがそれを行うのですか? 画像、テキスト、表を選択しています... マウスを追跡し、要素とカスタム ウィジェットの背後に灰色/青/ピンクの背景ボックスを描画することを検討する必要がありますか?

別の実験があります-メッセージのスタックを表示します。ここでは QPainter が使用されていないことを除いて、スキームは同じです。QLabels、QTextExits、QPushButtons (シーン: http://savepic.ru/2632728.jpg ) のみです。QLabel にフラグ SelectableByMouse を設定できますが、複数のメッセージを選択するにはどうすればよいですか?

Qt HTML レンダラーを使用するように提案することもできますが、これは「どのように機能するか」に対する答えではありません。

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

c++ - Qt paint figures at one window

  1. I create class Widget, it creates window, this class paints something on the window (i.e. it works as I want).
  2. I create yet one class, Circle, I want to paint on the window of class Widget.
  3. I pass adress of Widget and try to paint on Widget using QPainter paint (address of Widget); (in the instance of Circle) but i don't see anything.

I've tried to make code as shorter as possible during the execution of program I type out address of object Widget. It doesn't change. It means that the address of Widget was passed right.

Everywhere, where I type out address of Widget I receive the same address. Here is the code:

header Widget

Widget.cpp

header Circle.h

Circle.cpp

main

program is compiled and linked successful

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

c++ - Qtの別のクラスから変数にアクセスするには?

Qt で 2 つのウィジェットを持つメイン ウィンドウを実装しようとしています。そして、メインウィンドウのボタンの「ポイントの削除」機能を実装したいと思います。つまり、ボタンを押すと、リストボックスから選択したポイントが、描画している領域から消えます。そのため、信号/スロットでこれを行うことを考えていましたが、描画領域からポイントのリストにアクセスしようとすると、含まれているデータが見つかりません。これは今までの私のコードです:

paintwidget.cpp (メイン ウィンドウ):

p>

renderarea.cpp (私の描画領域):

p>

リストボックス.cpp:

p>

レンダリング領域からのリストは、QPoints の QList です。問題は、FOR ループではリストのサイズが 0 であるため、リストに含まれるポイントがまったく表示されないことです。どこかで初期化に失敗していると思いますが、どこかわかりません。

ポイントは QPainter で描画されるため、リストからポイントを削除すると、描画領域からも削除される可能性はありますか?

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

qt - QtableViewの一部のセルは、テーブルセルをクリックした後に自動的に再描画されません

インタラクティブボードゲームの実装でQTableViewを使用しています。表のセルに画像が表示されます。QStyledItemDelegateとpaint関数を使用して、テーブルセル内に画像を描画しています。

画像はテーブルの特定のセルにのみ表示され、ユーザーがテーブルセルをクリックすると更新される必要があるため、テーブルと同じサイズのdoubleint配列が使用されます。配列の値に応じて、画家はテーブルの特定のセルに画像を描画する必要があります。最初は、テーブルの4つのセル内に4つの画像しかありません。ユーザーがテーブル内のセルをクリックすると、配列が更​​新されます。これは、テーブルのセル内に描画および表示されるものを変更する必要があることを意味します。

通常、ユーザーは正常に更新された空の(白い)セルをクリックすると、特定の画像がセルに表示されます。ただし、画像を含み、更新する必要がある他のセルがある場合、double int配列は更新されますが、更新は表示されません。また、表示が更新されているはずのセルをクリックすると、更新が行われるという奇妙なこともわかりました。もちろん、このコースは、誰かがセルをクリックしたときに更新する方法に関係なく発生します。

再描画する前に、まずセル内の内容を消去しようとしましたが、それでも機能しません。デリゲートはスレッド内で継続的に実行され、ペインタ関数はテーブル内の各セルのインデックスを使用して呼び出されますか?画家がセルの領域を再描画する必要があり、セルをクリックした後にのみ発生するにもかかわらず、画像を含むセルの更新が自動的に更新されない方法がわかりません。または、そのcusは、毎回新しい画家が画家の機能に呼び出されますか?!

さて、これが代表者の画家の機能の私の実装です:

私の問題を解決する必要がある場合は、さらに情報を提供できます。前もって感謝します。

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

qt - 「QEvent*」から「QPaintEvent*」への無効な変換

タッチイベントが発生するかどうかを調べようとするか、それ以外の場合はペイントします。