首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QRect中的QMouseEvent问题

QRect中的QMouseEvent问题
EN

Stack Overflow用户
提问于 2010-12-09 19:26:18
回答 2查看 2.6K关注 0票数 2

OS::win_xp_sp3

Qt::4.6

可以在QRect中使用QMouseEvent吗?我有父窗口小部件,里面是一些QLabel与文本“状态未变”。

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

现在我只想在这个MyRect中执行MouseEvent操作。例如,如果我在MyRect上操作,父小部件中的文本需要更改。

例如:

代码语言:javascript
复制
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上)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-09 20:14:37

QRect既不是QObject也不是QWidget,所以它不接收事件。它只有四个数字描述一个矩形(从它派生出来是没有意义的)。您可以在小部件的鼠标事件处理程序中检查某个点是否为给定的矩形。像这样:

代码语言:javascript
复制
void MyLabel::mouseMoveEvent( QMouseEvent* e ) {
    if ( !rect.contains( e->pos() ) )
        return;
    //... handle mouse move
}

子类化的另一种选择是using an event filter

票数 7
EN

Stack Overflow用户

发布于 2010-12-09 20:15:08

是否可以像这样使用QMouseEvent (仅限在QRect上)?

不,至少不是你怎么做的。QRect不是QWidget,因此没有任何mouseEvent处理程序等等。它只是一个具有四个坐标的实体。

您可以通过将处理程序添加到实际的QWidget (通过子类化或使用installEventFilter)并在处理程序检查中使用QRect::contains(QPoint)在矩形中单击来执行您想要的操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4397656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档