• 7079阅读
  • 8回复

[提问]关于事件过滤器的问题 [复制链接]

上一主题 下一主题
离线vally1989
 
只看楼主 倒序阅读 楼主  发表于: 2011-09-21
今天写了一个QTreeView的子类,并且在主窗口注册了一个事件过滤器:navigation_tree->installEventFilter(this);接着在主窗口定义了这个监视器:
bool CMainWindow::eventFilter(QObject *target, QEvent *event){    if(target==navigation_tree)    {        if(event->type()==QEvent::MouseButtonDblClick)          {            QMouseEvent *mouseEvent=static_cast<QMouseEvent *>(event);            if(mouseEvent->buttons()==Qt::LeftButton)            {            dialog->show();                           }          }   } return QMainWindow::eventFilter(target,event);}结果双击navigation_tree 时没有反应,各位知道是怎么回事吗?困扰了一下午了,不知道谁遇到过类似的情况
离线vally1989
只看该作者 1楼 发表于: 2011-09-21
bool CMainWindow::eventFilter(QObject *target, QEvent *event)
{    if(target==navigation_tree)  
      {
            if(event->type()==QEvent::MouseButtonDblClick)      
                {    QMouseEvent *mouseEvent=static_cast<QMouseEvent *>(event);        
                    if(mouseEvent->buttons()==Qt::LeftButton)          
                                     {  dialog->show();                      
                                      }  
                 }  
        }
         return QMainWindow::eventFilter(target,event);
}


离线dbzhang800

只看该作者 2楼 发表于: 2011-09-21
呵呵,你可能没意识到QTreeView的结构,你想在它上面双击是很困难的。因为它是QAbstractScrollArea的派生类,几乎总是被它的viewport()以及可能的滚动条盖的严严实实。
离线vally1989
只看该作者 3楼 发表于: 2011-09-21
回 2楼(dbzhang800) 的帖子
这个还真不知道,呵呵
难道就没办法实现这个目的了吗?
离线vally1989
只看该作者 4楼 发表于: 2011-09-21
实际上我实现实现双击其中某个项目弹出对话框
离线dbzhang800

只看该作者 5楼 发表于: 2011-09-21
Re:回 2楼(dbzhang800) 的帖子
引用第3楼vally1989于2011-09-21 19:45发表的 回 2楼(dbzhang800) 的帖子 :
这个还真不知道,呵呵
难道就没办法实现这个目的了吗?



呵呵,其实我已经告诉你答案了。你应该可以得出...如下... 结论:
装过滤器的话,应该装在它的viewport()上
离线vally1989
只看该作者 6楼 发表于: 2011-09-21
回 5楼(dbzhang800) 的帖子
谢谢楼上,我试一下,非常感谢
离线vally1989
只看该作者 7楼 发表于: 2011-09-21
搞定了,果然是这样,太感谢了,呵呵
离线zhangshan594

只看该作者 8楼 发表于: 2013-01-25
请问怎么安装在ViewPort()上
快速回复
限100 字节
 
上一个 下一个