0

qgraphicsview から qgraphicsitem にイベントを渡す方法を知っています。しかし、問題はアイテムのmouseEventを実行した後です。私の場合は望ましくないビューのマウスイベントを実行する必要があります。問題は、「mousePress がアイテム上にあるか、空のスペース上にあるかを知るスマートな方法はありますか?」ということです。

編集:作業コード:

#include <QtGui>

class CustomView : public QGraphicsView
{

protected:
    void mousePressEvent(QMouseEvent *event)
    {
        QGraphicsView::mousePressEvent(event);
        qDebug() << "Custom view 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);

    QGraphicsScene scene(0, 0, 100, 100);
    scene.addItem(&item);

    CustomView view;
    view.setScene(&scene);
    view.show();
    return a.exec();
}

ビューの代わりに qgraphics シーンに同じ概念を適用する

#include <QtGui>
class CustomScene : public QGraphicsScene
{
protected:
    void mousePressEvent(QGraphicsSceneMouseEvent *event)
    {
        if(itemAt(event->scenePos()))
            QGraphicsScene::mousePressEvent((event));
        else
        qDebug() << "Custom view 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

2 に答える 2

2

アイテムでマウス イベントが発生したかどうかを判断するには、QGraphicsView::itemAtを使用できます。

void CustomView::mousePressEvent(QMouseEvent *event)
{
    if (itemAt(event->pos()))
        // Click on item
    else
        // Click on empty space
    ...
}
于 2013-06-23T06:55:51.157 に答える