0

QGraphicsView にあるシーンに楕円を描画する関数があります。別の関数には、楕円と同じ XY をクリックしたかどうかを確認するクリック イベントがあり、その XY かどうかを確認するためにマップを反復処理します。オブジェクトが返される場合、特定のオブジェクトに割り当てられます

ただし、楕円をクリックすると、データを見つけるためにxyなどを検索する代わりに、楕円にデータがバインドされるようにする方法を見つけることを検討しています

アイテムにデータを割り当てることができる関数 setdata を見つけましたが、関数が単純にデータを描画して追加するのを見て、それに関連するデータを実際に抽出する方法がわかりません。アイテムはシーンであり、データはアイテムにバインドする必要がありますが、それがどのように行われたのかわかりません。ドキュメントを検索しても答えが得られませんでした

ここに私の機能があります

void GUI::paintDot(double x, double y, double Id)
{
    // Decalre a QPen for Painting dots
    QPen pen;

    // set the pen colour
    pen.setColor(Qt::white);

    if(x < m_height && y < m_width)
    {
        // Add ellipse at the x y position passed in
        scene2->addEllipse(x, y, 1.5, 1.5, pen, QBrush(Qt::SolidPattern))->setData(0, Id);
    }
}

0 は任意のキー値であり、実際にキー値を表すものに変更する必要がありますが、この例では問題ありません

4

1 に答える 1

0

データを取得しようとしているコードを表示していません (たとえば、マウスの押下などをキャッシュするイベント ハンドラー)。したがって、あなたの問題が実際に何であるかはわかりませんが、次のように簡単にする必要があります。

QVariant v = ellipseObject->data(0);

そして、入力したデータ型に応じて、そこから値を抽出します。あなたの場合、double を入力します。

 double d = v.toDouble();

(そして明らかに、変数を必要とせずにこれらの 2 行を組み合わせることができますv)

于 2013-05-01T16:27:55.287 に答える