問題タブ [qgraphicsview]
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.
qt - QGraphicsView のスクロールと画像のスケーリング/トリミング
QGraphicsView に、スクロールバーやキーボードとマウスでスクロールせずに、常にビューポートのサイズに合わせて拡大縮小 (および必要に応じてトリミング) される背景画像が必要です。以下の例は、ビューポートで画像をスケーリングおよびトリミングするために行っていることですが、エーテルから引き出されたトリミングにランダムな値を使用しています。論理的な解決策が欲しいですか?
QGraphicsView のサイズを変更しても機能する QGraphicsView のサイズに合わせて画像をスケーリングおよびトリミングする方法を知りたいです。1.5 と 19 はどこから来たのですか?
編集; setBackgroundBrush も使用しようとしましたが、スケーリング/クロップされた QImage/QPixmap を使用している場合でも、タイル張りの背景が表示されます。
編集; これまでの私の解決策は、必要な結果を得るために drawBackground() をオーバーライドすることでしたが、それでも、画像を qgraphicsview のビューポート サイズに合わせてサイズ変更する方法を学ぶのには役立ちません。それ以上の回答は大歓迎です。
c++ - Qtグラフィックシーンのマウスイベントの伝播
こんにちは私はqtを学んでいて、グラフィックシーンにいくつかのウィジェットを追加するために次のことをしています
私のProductInfoクラスはマウスのリリースを処理し、シグナルを発します
問題は、ウィジェットをシーンに追加した後、マウスリリースイベントを取得せず、productClickedシグナルを出力しないことですが、ウィジェットをメインウィンドウ(シーンではなく)に追加すると、期待どおりに機能します。私は何が間違っているのですか?
c++ - カスタムQGraphicsItemsがコンパイルされず、「オブジェクトはプライベートです」エラーが発生します
ここでFredが示すように、カスタムQGraphicsItemボタンを作成しようとしています。彼が投稿したコードはここにあります。
問題は、コードをコンパイルしようとすると、次の2つのエラーが発生することです。
- /usr/include/qt4/QtGui/qgraphicsitem.h'QGraphicsItem :: QGraphicsItem(const QGraphicsItem&)'はプライベートです
- /usr/include/qt4/QtCore/qobject.h'QObject
:: QObject(const QObject&)'はプライベートです
これは、上記のサンプルと基本的に同じコードスニペットです。エラーはクラスの減速にあります。
興味深いことに、ここに示されている他のサンプルは正常に機能します。そのためのサンプルコードはここにあります。
何が悪いのか分かりますか?前もって感謝します。
qt - Qt - 子クラスへの無効な変換
Graphics View フレームワークを使用してポリゴンを描画しています。これでシーンにポリゴンを追加しました:
しかし、選択、マウス オーバー インジケーター、その他の同様のものをグラフィックス アイテムに実装する必要があります。そこで、QGraphicsPolygonItem を継承するクラスを宣言しました。
ご覧のとおり、これまでのところ、そのクラスにはあまり取り組んでいません。しかし、QGraphicsPolygonItem を私の GridHex クラスに置き換えるべきではありませんか? これにより、「「QGraphicsPolygonItem*」から「GridHex*」への無効な変換」エラーがスローされます。
私は何を間違っていますか?
c++ - Qt-グラフィックビューフレームワークでドラッグアンドドロップ
グラフィックフレームワークを使用して、単純なドラッグ可能なアイテムを作成しようとしています。これまでに行ったことのコードは次のとおりです。
ウィジェットクラス:
DragViewクラス:
DragSceneクラス:
DragItemクラス:
main.cppはウィジェットをインスタンス化し、それを表示します。円をドラッグしようとすると、ドラッグを放した場所に関係なく、アプリは元の円の上に別の円を作成するだけです。DragSceneのdropEvent()のqDebug()は、ドラッグが終了するたびにQPointF(0,0)を表示します。これを機能させるために、自分が何をしなければならないか、どのクラスをサブクラス化する必要があるか、どのメソッドをオーバーライドする必要があるかを正確に理解しようとするのに苦労しています。これに関するドキュメントはあまり詳細ではありません。これを機能させる方法を知りたいのですが、公式ドキュメント(優れていますが、より詳細なものがあれば素晴らしいです)の他に、グラフィックスビューフレームワークについて学ぶためのより包括的なリソースが他にある場合は主題に関する論文)。
編集:
Badgerrのアドバイスに従って、DragScene :: dropEvent()のitem-> pos()をitem->scenePos()に置き換えました。これで、dropイベントがdropサイトに新しい円を作成します。これは、多かれ少なかれ私が望んでいたものです。ただし、元の円はそのままで、ドラッグの進行中は、アイテムはマウスカーソルに追従しません。
QGraphicsSceneDragDropEventのドキュメントには、pos()は、イベントを送信したビューに関連するカーソル位置を返す必要があると記載されています。これは、間違っていない限り、常に(0,0)であってはなりません。変。
フォーラムの投稿で、QDrag :: setPixMap()を使用してドラッグ中に何かを表示できることを読みました。例では、画像がピックスマップとして設定されているのを見ましたが、グラフィックスアイテムと同じようにピックスマップを作成するにはどうすればよいですか。ドラッグすることになっていますか?
c++ - QGraphicsItemGroupのサブクラス化
QGraphicsWidgetから派生したクラスを持つシステムがあります。QGraphicsSceneのレイアウトで派生クラスオブジェクトを管理します。ここで、2つ以上のQGraphicsWidgetを含む複合アイテムが必要です。また、そのアイテムをレイアウト内に配置する必要があります。そこで、QGraphicsItemGroupを選択し、このようにクラスを記述します。
sizeHint関数を再度実装しただけです。CompositeItemインスタンスをレイアウトに追加すると、表示されません。これは何が原因でしょうか?どこを間違えたの?
c++ - コンテナアイテムの実装
私はTrain Traffic Controllerソフトウェアプロジェクトに取り組んでいます。このプロジェクトでの私の責任は、視覚的な鉄道 GUI を開発することです。
Qtでプロジェクトを実装しています。
今ではQGraphicsLinearLayoutを使用してアイテムを保持しています。各アイテムの座標を計算したくないので、レイアウトを使用しています。
ここまでは、レイアウトを追加するアイテム クラスを作成しました。たとえば、SwitchItem クラスは
現実世界の鉄道スイッチ。各アイテム クラスは、独自のペイントとイベントを担当します。ここまでは順調ですね。
ここで、2 つ以上のアイテムを含むことができる複合アイテムが必要です。このクラスは、それに含まれるアイテムのペイントを担当します。同じレイアウト セル内に 2 つ以上のアイテムを配置する必要があるため、このクラスが必要です。それらを同じセルに配置しないと、レイアウトを使用できません。下の画像を参照してください。
同じセル内の BlockSegmentItem と SignalItem。
CompositeItem ヘッダー ファイル
このコードはペイントには適していますが、アイテム イベントに関しては問題があります。 QGraphicsSceneは複合アイテムを、レイアウトには適しているがイベントには適していない単一のアイテムのように扱います。各アイテムには独自のイベント実装があるためです (たとえば、SignalItem には特別なコンテキスト メニュー イベントがあります)。
アイテム イベントを個別に処理する必要があります。また、レイアウト用の複合アイテムの実装も必要です。どうすればこのジレンマを克服できますか?
c++ - QGraphicsView の更新されたサイズを取得する
私の Qt アプリケーションでは、動的に QGraphicsView を作成し、それらをQGridLayout内に追加しています。グリッド内に最初のビューを追加すると、ビューはグリッド内の使用可能なすべてのスペースをカバーします。次に、2 番目のビューを追加すると、グリッド内に 2 つの同じサイズのビューができます。次に、3 番目のビューを追加すると、グリッド内に同じサイズのビューが 3 つあります。等々。
最初のビューの更新されたサイズを取得するにはどうすればよいですか?
以下は私の試用版ですが、これは機能していないと思います。
c++ - QGraphicsView/QGraphicsScene のスケーリングに関する一般的なアドバイス
私のプロジェクトでは、QGraphicsView / QGraphicsSceneのものを使用しています。
私のシーンには、2D グラフィックスを含む領域があります。地域の数は制限されます (20 としましょう)
。ユーザーは 1 つまたは複数の地域を表示することを選択できます。
ユーザーが 1 つの領域を表示することを
選択した場合、シーンに 1 つの領域を表示します。ユーザーが n 領域を表示することを選択した場合、シーンに n 領域を表示します
。同じシーンに n 領域を適合させるためのスケーリング ロジックが必要です。
どうすればこれを達成できますか?
c++ - QGraphicsView ensureVisible() と centerOn()
QGraphicsViewでパン/スケールを行う予定です。
だから私はQGraphicsViewのドキュメントを読んで、 ensureVisible()やcenterOn( )のようないくつかのユーティリティ関数を見ました。
ドキュメントの内容は理解できたと思いますが、実際の例を書くことができません。
問題を理解するためのサンプルコードを書いてください/提案してください.