私はELFバイナリファイルの内部構造を表示するプロジェクトを持っています。私はQGraphicsViewとQGraphicsSceneを使用します。だから私はグラフィックスのシーンにブロックを表示することができますが、私はこのブロックの単一ブロックの表示内容をマウスでクリックする必要があります。私は使用機能を試しています:Qt QGraphicViewとQGraphicSceneマウスの位置
void MainWindow::mousePressEvent(QMouseEvent* event)
{
ui->textEdit->append(QString("x = %1, y = %2").arg(event->Pos().x()).arg(event->Pos().y()));
}
しかし、位置は全体のウィンドウで追跡しています。問題は、ウィンドウの幅と高さが動的であり、QGraphicsSceneの高さがウィンドウの幅よりも大きい可能性があるということです。だから私は単一のブロックを追跡することはできません。
私はいくつかの機能を試しました: mapFromScene、mapToScene、mapFromGlobal、...しかし、私はわかりません。どのように機能していますか?
位置はQGraphicalViewのスクロールバーとウィンドウのサイズで計算する必要がありますが、正確に計算するのは難しく、正しい解決策ではありません。
いくつかのアイデアは、どのようにグラフィックシーンで本当の位置を得るのですか?助けてくれてありがとう。
あなたが望むものはあまり明確ではありません。これらの座標系はすべて互いに相対的であり、ウィジェットまたはシーン項目のmousePressEventの任意の実装に対して、そのオブジェクトの座標系で作業します。シーンの座標にマウスイベントが必要な場合は、QGraphicsScene :: mousePressEventを再実装します。ビューの座標にしたい場合は、QGraphicsView :: mousePressEventなどを再実装します。私はQGraphicsScene :: mousePressEventが適切な場所であることを暗示して「グラフィックシーンの真の位置」を読んでいますが、明確ではありません。 – goug
ありがとう、私はそれを試してみましょう。 – cherioss
トップレベルウィンドウでイベントを処理するのはなぜですか?グラフィックシーンシステムの目的は、対話できるアイテムを提供することです。あなたはアイテムそのものとあらゆる種類のやりとりをすることができます。それは簡単にできるように設計されています。 –