• 9435阅读
  • 5回复

事件能传递吗,就是子类触发了一个鼠标事件,能不能也将这个鼠标事件发给父类 [复制链接]

上一主题 下一主题
离线nikshuang
 

只看楼主 倒序阅读 楼主  发表于: 2009-12-03
如题,就是一个窗体上有个按钮,窗体是按钮的父类,鼠标点击按钮的同时,应该是QApplication会给按钮发送一个鼠标点击事件,能不能在这个鼠标点击事件发送的同时,也发送一个鼠标点击事件给父类(窗体)。我看到QWidget中有一个属性:Qt::WA_NoMousePropagation,看说明好像意思也是事件传递,但我将其在setAttribute中设置为false也不行。

另外,我还想用事件过滤器来处理,就是过滤器接收到发送到按钮的点击事件的时候,发送一个相同的事件给窗体,但不起作用,代码如下:

MainWindow::MainWindow()
{
    ......
    this->installEventFilter();                   //没有父进程,所有为空
    button = new QPushButton(this);
    button->installEventFilter(this);
    ......
}

bool MainWindow::eventFilter(QObject *target, QEvent *event)
{
    if (target == button)
    {
        qDebug() << "event filter1\n";
        if (event->type() == QEvent::MouseButtonPress)
        {
            qDebug() << "event filter2\n";
            //return MainWindow::eventFilter(this, event);

            return false;
        }
    }

    return false;
}



另外,qt中类如何发送事件,我看到只有QApplication才有这个方法--sendEvent,请问这个方法如何使用,试过用QApplication::sendEvent,不行。main.cpp中一开始就有
创建一个QApplication,在类函数里面能使用他吗,如果使用
离线dbzhang800

只看该作者 1楼 发表于: 2009-12-03
我不清楚楼主这样做的意图是什么

感觉上 signals应该够用了
你的按钮收到事件后,可以发送一个signal出去,然后你的父窗体接受signal不就可以了
离线sbtree
只看该作者 2楼 发表于: 2009-12-03
强烈建议:分清 “父类” 和 “父对象” 的概念
父类: 继承中的概念,一个类可以通过 class A: public  B这样的代码创建一个新类,class B称为父类或派生类, class A称为子类或基类。这是c++中基本概念,是完全概念上的东西
父对象(你或许叫做别的名称):只是在QT中出现的新概念,是一个实实在在的东西。QT为了方便实现内存管理,对于所有基于QObject类或弃子类的对象通过使用类似new QObject( parent )给出的一个树状结构,parent是一个父对象的指针,当这个指针指向的对象被析构时,其下的所有子对象也被析构,如同砍掉整个树枝。
windows 7 + VC++2008 + Qt4.5.2
离线wd007

只看该作者 3楼 发表于: 2009-12-03
楼上兄弟说的极是。就是有个小的笔误:“class B称为父类或派生类, class A称为子类或基类”

应为“class B称为父类或基类, class A称为子类或派生类”

呵呵
欢迎访问我的博客,一起学习提高
http://blog.csdn.net/qter_wd007
离线duduqq

只看该作者 4楼 发表于: 2009-12-04
return B::eventFilter(event) ;
离线sbtree
只看该作者 5楼 发表于: 2009-12-04
引用第3楼wd007于2009-12-03 22:37发表的  :
楼上兄弟说的极是。就是有个小的笔误:“class B称为父类或派生类, class A称为子类或基类”
应为“class B称为父类或基类, class A称为子类或派生类”
呵呵

多谢版主纠正!!
windows 7 + VC++2008 + Qt4.5.2
快速回复
限100 字节
 
上一个 下一个