操作系统:: 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上)?

最佳答案

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

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

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

10-08 11:38