在Qt中告诉主类一个项目被点击了

时间:2013-01-05 10:58:49

标签: c++ qt mouseevent

情况

我在QT中有一个Dialog类,我在上面画了一个正方形的光栅。方块在MySquare类(MySquare: QGraphicsItem)中实现。

在MySquare内部有许多功能(mysquare.h protected :)

    void mousePressEvent(QGraphicsSceneMouseEvent *event);
    void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
    void keyPressEvent(QKeyEvent *event);
    void mouseMoveEvent(QGraphicsSceneMouseEvent *event);

当我点击一个正方形时,它使用以下函数给出了正方形的相对坐标。

void MySquare::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    update();
    QGraphicsItem::mousePressEvent(event);
    qDebug() << "mouse Pressed";
    qDebug() << "coordinates:";
    qDebug() << "X:"<< x/w << " Y:" << y/h ;
}

enter image description here

其中x和y是光栅中的x和y位置,w和h代表宽度和高度

但我的问题是如何让我的Dialog类知道点击了哪个方格?

1 个答案:

答案 0 :(得分:1)

您可以通过Qt的信号/插槽机制在MySquare和您的Dialog之间进行通信。 单击一个方块时,它会发出一个信号,而Dialog有一个连接到该信号的插槽。

要识别哪个方形发送信号,有几种可能性:

  • 正方形的坐标在信号
  • 中传递
  • 发出信号的this的{​​{1}}指针传递
  • 在插槽中,您可以使用MySquare功能确定发出信号的人。