問題タブ [qgraphicsitem]

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 に答える
4349 参照

qt - QGraphicsItem : 左上隅ではないアイテムの原点をエミュレートする

私のアプリケーションは Qt を使用しています。

QGraphicsPixmapItemを継承するクラスがあります。

これらのアイテムに変換 (回転など) を適用する場合、アイテムの原点 (またはピボット ポイント) は常に左上隅になります。

たとえば、アイテムの位置を設定するときに、実際にピックスマップの中心が変更されるように、この原点を変更したいと思います。

または、回転を適用する場合、回転の原点はピックスマップの中心になります。

私は Qt で箱から出してすぐにそれを行う方法を見つけていないので、次のようにitemChange()を再実装することを考えました:

Qtのドキュメントでは、アイテムの位置とその変換行列は2つの異なる概念であると述べているため、これでうまくいくと思いました。

しかし、それは機能していません。

何か案が ?

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

c++ - QGraphicsItem::scenePos() が (0,0) を返し続けるのはなぜですか

私はこのコードをいじっています:

thisポインターが参照する場所QGraphicsScene. QPointF(0,0)どちらの場合も、両方の出力を取得します。ドキュメントを読んで、ローカル座標系内の位置ではなく、シーン内の線の位置を返すことになっていると
思いました。scenePos()私は何を間違っていますか?

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

qt - QGraphicsItemの選択解除の再描画の問題

非常にシンプルなQtGUIアプリケーション:

  • シーンには、QGraphicsItemとして実装された複数の円があります
  • boundingRectは、この円の周りの正方形を返します。
  • メソッド「shape」はオーバーライドされません。

私が追加したpaint()メソッドで問題が発生します:

選択はうまく描画されますが、選択を解除しても再描画は発生しません。ログレベルでは、アイテムが実際に選択フラグを失ったことがわかります。itemChangeからupdate()を呼び出すことも役に立ちません。ご提案ありがとうございます。

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

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&)'はプライベートです

これは、上記のサンプルと基本的に同じコードスニペットです。エラーはクラスの減速にあります。

興味深いことに、ここに示されている他のサンプルは正常に機能します。そのためのサンプルコードはここにあります。

何が悪いのか分かりますか?前もって感謝します。

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

qt - Qt - 子クラスへの無効な変換

Graphics View フレームワークを使用してポリゴンを描画しています。これでシーンにポリゴンを追加しました:

しかし、選択、マウス オーバー インジケーター、その他の同様のものをグラフィックス アイテムに実装する必要があります。そこで、QGraphicsPolygonItem を継承するクラスを宣言しました。

ご覧のとおり、これまでのところ、そのクラスにはあまり取り組んでいません。しかし、QGraphicsPolygonItem を私の GridHex クラスに置き換えるべきではありませんか? これにより、「「QGraphicsPolygonItem*」から「GridHex*」への無効な変換」エラーがスローされます。

私は何を間違っていますか?

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

c++ - QGraphicsItemGroupのサブクラス化

QGraphicsWidgetから派生したクラスを持つシステムがあります。QGraphicsSceneのレイアウトで派生クラスオブジェクトを管理します。ここで、2つ以上のQGraphicsWidgetを含む複合アイテムが必要です。また、そのアイテムをレイアウト内に配置する必要があります。そこで、QGraphicsItemGroupを選択し、このようにクラスを記述します。

sizeHint関数を再度実装しただけです。CompositeItemインスタンスをレイアウトに追加すると、表示されません。これは何が原因でしょうか?どこを間違えたの?

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

c++ - QGraphicsLayoutItem のサブクラス化

QGraphicsLayoutItemをどのようにサブクラス化できますか? QGraphicsLayoutItem をサブクラス化し、sizeHint と setGeometry を再実装するクラスを作成しますが、カスタム アイテムを線形レイアウトまたはグリッド レイアウトに追加すると、表示されませんか?何が欠けている?

これが私の試練です。

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

qt - MFC ビューで QGraphicsItem を描画する方法

アプリケーションで Qt を使い始めています。私のアプリケーションは MFC ベースです。現在の MFC ビューで QGraphicsItems を描画したいのですが、可能ですか?

MFC ビューで QWinWidget を使用して QGraphicsView をホストすることで実現できると言うかもしれませんが、それは機能しません。QGraphicsView 自体はサポートしていませんが、キャンバス (MFC ビュー) はズームと回転をサポートしているためです。QGraphicsItem をズームすると、QGraphicsView はそれ自体を拡大する代わりにスクロール バーを表示します。

なにか提案を?ありがとう!

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

c++ - コンテナアイテムの実装

私はTrain Traffic Controllerソフトウェアプロジェクトに取り組んでいます。このプロジェクトでの私の責任は、視覚的な鉄道 GUI を開発することです。

Qtでプロジェクトを実装しています。

今ではQGraphicsLinearLayoutを使用してアイテムを保持しています。各アイテムの座標を計算したくないので、レイアウトを使用しています。

ここまでは、レイアウトを追加するアイテム クラスを作成しました。たとえば、SwitchItem クラスは

現実世界の鉄道スイッチ。各アイテム クラスは、独自のペイントとイベントを担当します。ここまでは順調ですね。

ここで、2 つ以上のアイテムを含むことができる複合アイテムが必要です。このクラスは、それに含まれるアイテムのペイントを担当します。同じレイアウト セル内に 2 つ以上のアイテムを配置する必要があるため、このクラスが必要です。それらを同じセルに配置しないと、レイアウトを使用できません。下の画像を参照してください。

複合アイテム

同じセル内の BlockSegmentItem と SignalItem。

CompositeItem ヘッダー ファイル

このコードはペイントには適していますが、アイテム イベントに関しては問題があります。 QGraphicsSceneは複合アイテムを、レイアウトには適しているがイベントには適していない単一のアイテムのように扱います。各アイテムには独自のイベント実装があるためです (たとえば、SignalItem には特別なコンテキスト メニュー イベントがあります)。

アイテム イベントを個別に処理する必要があります。また、レイアウト用の複合アイテムの実装も必要です。どうすればこのジレンマを克服できますか?

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

c++ - QGraphicsItem はマウス ホバー イベントを受け取りません

派生要素QGraphicsViewを含むから派生したクラスがあります。QGraphicsItemこれらの要素の上にマウス カーソルが置かれるたびに色が変わるようにしたいので、hoverEnterEvent(およびhoverLeaveEvent)を実装しました。

ただし、このイベント ハンドラー コードは実行されません。マウス トラッキングを明示的に有効にしました。

それでも、運が悪い。私は何を間違っていますか?