QRect中QMouseEvent的问题

nik*_*_02 2 c++ qt visual-studio-2008

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");
    }

}
Run Code Online (Sandbox Code Playgroud)

什么都没发生

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

Fra*_*eld 7

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

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

子类化的替代方法是使用事件过滤器.