2011-03-28 47 views
1

我有一个QListWidget对话框,当我想要做某事(例如,打开一个QFileDialog窗口),当用户双击QListWidget。不幸的是,void doubleClicked (const QModelIndex & index)只有在列表中有项目时才会触发。QListWidget发送没有项目doubleClicked信号

是否有可能让小部件在接收到双击事件时触发信号,小部件中的任何位置?或者需要一种不同的方法?

回答

5

您可以install an event filter到listwidget的视角构件,这样的事情:

listWidget->viewport()->installEventFilter(this); // "this" could be your window object. 

在为QEvent::MouseButtonDblClick事件eventFilter方法检查:

bool YourWindowClass::eventFilter(QObject *obj, QEvent *event) 
{ 
    if (event->type() == QEvent::MouseButtonDblClick) 
    { 
     QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event); 
     qDebug("Mouse double click %d %d", mouseEvent->x(), mouseEvent->y()); 
     return true; 
    } 
    else 
    { 
     return QMainWindow::eventFilter(obj, event); 
    } 
} 

我希望这有助于。

+0

感谢这个,我只想补充一点,因为我有多个QListWidgets来检查,我也必须检查obj。但是由于QListWiget的视口是生成事件的,所以实际上你需要检查obj-> parent()对应你的QListWidget来发现哪个被双击。 – 2011-03-29 13:29:25