2

イベントを qgraphics シーンから q グラフィックス アイテムに渡す方法は知っていますが、問題はアイテムにあり、シーンのマウス イベントが実行されています。

たとえば、以下のコードでは、項目を押すと「カスタム シーンが押されました」という出力が表示されます。

 #include <QtGui>
class CustomScene : public QGraphicsScene
{
protected:
    void mousePressEvent(QGraphicsSceneMouseEvent *event)
    {
        if(itemAt(event->pos()))
            QGraphicsScene::mousePressEvent((event));
        else
        qDebug() << "Custom scene clicked.";
    }
};
class CustomItem : public QGraphicsRectItem
{
protected:
    void mousePressEvent(QGraphicsSceneMouseEvent *event)
    {
        qDebug() << "Custom item clicked.";
    }
};
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    CustomItem item;
    item.setRect(20, 20, 60, 60);
    CustomScene scene;
    //scene().set
    scene.addItem(&item);
    QGraphicsView view;
    view.setScene(&scene);
    view.show();
    return a.exec();
}
4

1 に答える 1

1

QGraphicsSceneMouseEvent::posのドキュメントを参照してください。

項目座標でのマウス カーソルの位置を返します。

これは、マウスがアイテムの上端と左端から 10 ピクセル離れている場合、アイテムがシーンのどこにあるかに関係なく、座標として (10,10) を取得することを意味します。

必要なのはQGraphicsSceneMouseEvent::scenePosです:

シーン座標でのマウス カーソルの位置を返します。

if-ステートメントを次のように変更します。

 if(itemAt(event->scenePos()))
    QGraphicsScene::mousePressEvent((event));
 else
    qDebug() << "Custom scene clicked.";
于 2013-06-24T08:22:27.603 に答える