проблема с QMouseEvent в QRect - PullRequest
       0

проблема с QMouseEvent в QRect

2 голосов
/ 09 декабря 2010

OS :: win_xp_sp3

Qt :: 4,6

Можно ли использовать QMouseEvent внутри QRect? У меня есть родительский виджет, а внутри какой-то 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 ]

7 голосов
/ 09 декабря 2010

QRect не является ни QObject, ни QWidget, поэтому он не получает события. Это просто четыре числа, описывающие прямоугольник (и не имеет смысла его выводить). Вы можете проверить, является ли точка заданным прямоугольником в обработчике события мыши вашего виджета. Как:

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

Альтернативой подклассу является с использованием фильтра событий .

2 голосов
/ 09 декабря 2010

возможно ли использовать QMouseEvent следующим образом (только для QRect)?

Нет, по крайней мере, не так, как ты это делаешь. QRect не является QWidget и поэтому не имеет никаких обработчиков mouseEvent и подобных. Это просто сущность с четырьмя координатами.

Вы можете сделать то, что вы хотите, добавив обработчик к реальному QWidget (либо с помощью подкласса, либо используя installEventFilter) и в проверке обработчика для щелчка по прямоугольнику, используя QRect::contains(QPoint).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...