• 9649阅读
  • 5回复

事件过滤器与QListWidget [复制链接]

上一主题 下一主题
离线ueng
 
只看楼主 倒序阅读 楼主  发表于: 2009-04-09
在mywidget的构造函数中,给QListWidget注册了监视对象,但是没有在mywidget 的eventFilter函数中接收到鼠标的信息,《C++ GUI Qt4》里对事件过滤器有这样的描述:QObject在看到自己的事件之前,可以通过设置另外一个QObject实例先监视这些事件。为什么在mywidget 的eventFilter函数中接收到鼠标的信息呢?想不明白其中的原因,求各位大侠指导指导

代码如下:

mywidget::mywidget(QWidget *w):QWidget(w)
{
        myListWidget *l = new QListWidget();
        l->addItem("first");
        l->addItem("second");
        l->addItem("third");
        l->addItem("furth");
        l->installEventFilter(this);

        QHBoxLayout * mainLayout = new QHBoxLayout();
        mainLayout->addWidget(l);
        setLayout(mainLayout);
}
bool mywidget::eventFilter(QObject *target,QEvent * e)
{
        qDebug()<<"-----------event type "<<e->type();
        if(e->type() == QEvent::MouseButtonPress)
        qDebug()<<"---------------mouse press";   //程序在调试时,按鼠标没有输出
        return true;
}
[ 此帖被ueng在2009-04-13 15:01重新编辑 ]
离线ww18031901

只看该作者 1楼 发表于: 2009-04-13
没看懂你的问题  (为什么在mywidget 的eventFilter函数中接收到鼠标的信息呢?)

不过你的代码是 想用 mywidget 监视 myListWidget 是没错的。
离线ueng
只看该作者 2楼 发表于: 2009-04-13
我的意思是用mywidget 监视 QListWidget ,看看QListWidget中的鼠标事件是否被mywidget监控到,因为按照我对书中那句话的理解,应该是QListWidget中的所有事件都能被mywidget监控到的,但是上面的代码在qDebug()中并没能输出有关鼠标的信息


ps: myListWidget  = new myListWidget()应该为

myListWidget = new QListWidget()
离线qazasdwsx

只看该作者 3楼 发表于: 2010-12-06
是的~是有这个问题 我现在还没解决。。
离线qazasdwsx

只看该作者 4楼 发表于: 2010-12-06
不过这个问题可以针对某一个事件来解决
比如说如果是为了捕获mousepress
可以这么写
protected:    
    void mousePressEvent(QMouseEvent *event);  
void ProjectListWidget::mousePressEvent(QMouseEvent *event)    
{    
    //***********
    QListWidget::mousePressEvent(event);    
}    
这样能捕获到

不过很奇怪啊 哈哈
离线ajaxhe
只看该作者 5楼 发表于: 2012-05-11
改成: l->viewport()->installEventFilter(this);
参考链接:
http://stackoverflow.com/questions/5465537/qlistwidget-send-doubleclicked-signal-with-no-items
快速回复
限100 字节
 
上一个 下一个