2010-12-09 22 views
2

OS :: win_xp_sp3問題QMouseEvent查閱QRect中

的Qt :: 4.6

是否有可能使用QMouseEvent查閱QRect裏面? 我有父窗口部件,裏面是一些QLabel文本「狀態不變」。

此外,內部父窗口小部件是從QRect派生的MyRect。

現在我想只在這個MyRect中使用MouseEvent。例如,如果我對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上)?

回答

7

QRect既不是QObject也不是QWidget,所以它不接收事件。 這只是描述矩形的四個數字(並且從它派生出來沒有意義)。 您可以檢查一個點是否是您的小部件的鼠標事件處理程序中給定的矩形。如:

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

子類別的替代方法是using an event filter

2

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

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

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

+0

謝謝。很有幫助 – 2010-12-09 12:17:45