QRect中QMouseEvent的问题

时间:2010-12-09 11:26:18

标签: c++ visual-studio-2008 qt

OS :: win_xp_sp3

Qt的:: 4.6

是否可以在QRect中使用QMouseEvent? 我有父小部件,里面是一些QLabel文本“状态不变”。

此外,内部父窗口小部件是MyRect,它是从QRect派生的。

现在我希望MouseEvent仅在此MyRect中执行。例如,如果我在MyRect上操作,则需要更改父窗口小部件中的文本。

例如:

class MyRect : public QRect  {
      public:
      MyRect(int x, int y, int w, int h, ParentWidget* parent)
            : QRect(x,y,w,h) 
            {
               itsParent = parent;
            }
      ~MyRect() {}

      protected:
      void mouseMoveEvent(QMouseEvent* event)  

      private:
      ParentWidget* itsParent

  };  

void MyRect::mouseMoveEvent(QMouseEvent* event)
{
    if(event->buttons() == Qt::LeftButton)
    {
        itsparent->label->setText("status changed");
    }

}

没有任何反应

问题::是否可以像这样使用QMouseEvent(仅限于QRect)?

2 个答案:

答案 0 :(得分:7)

QRect既不是QObject也不是QWidget,因此它不接收事件。 它只是描述一个矩形的四个数字(从它衍生出来没有意义)。 您可以检查点是否是窗口小部件的鼠标事件处理程序中的给定rect。像:

void MyLabel::mouseMoveEvent( QMouseEvent* e ) {
    if ( !rect.contains( e->pos() ) )
        return;
    //... handle mouse move
}

子类化的替代方法是using an event filter

答案 1 :(得分:2)

  

是否可以像这样使用QMouseEvent(仅限于QRect)?

不,至少不是你怎么做的。 QRect不是QWidget,因此没有任何mouseEvent处理程序等。它只是一个有四个坐标的实体。

您可以通过向真实QWidget添加处理程序(通过子类化或使用installEventFilter)并在处理程序中检查是否使用QRect::contains(QPoint)单击矩形来执行您想要的操作。