簡體   English   中英

QRect中QMouseEvent的問題

[英]problem with QMouseEvent in QRect

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)?

QRect既不是QObject也不是QWidget,因此它不接收事件。 它只是描述一個矩形的四個數字(從它衍生出來沒有意義)。 您可以檢查點是否是窗口小部件的鼠標事件處理程序中的給定rect。 喜歡:

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

子類化的替代方法是使用事件過濾器

是否可以像這樣使用QMouseEvent(僅限於QRect)?

不,至少不是你怎么做的。 QRect不是QWidget ,因此沒有任何mouseEvent處理程序等。 它只是一個有四個坐標的實體。

您可以通過向真正的QWidget添加處理程序(通過子類化或使用installEventFilter )來執行您想要的操作,並在處理程序中使用QRect::contains(QPoint)檢查單擊矩形。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM