C++ QListWidget发送不带项目的双击信号

C++ QListWidget发送不带项目的双击信号,c++,qt,click,qt-creator,qlistwidget,C++,Qt,Click,Qt Creator,Qlistwidget,我在一个对话框上有一个QListWidget,当用户双击QListWidget时,我想做一些事情(例如,打开QFileDialog窗口)。不幸的是,void双击(const QModelIndex&index)仅当列表中有项目时才会触发 是否有可能让小部件在收到双击事件时在小部件内的任何位置触发信号?或者需要一种不同的方法吗?您可以访问listwidget的视口小部件,如下所示: listWidget->viewport()->installEventFilter(this); //

我在一个对话框上有一个QListWidget,当用户双击QListWidget时,我想做一些事情(例如,打开QFileDialog窗口)。不幸的是,
void双击(const QModelIndex&index)
仅当列表中有项目时才会触发

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

您可以访问listwidget的视口小部件,如下所示:

listWidget->viewport()->installEventFilter(this); // "this" could be your window object.
在eventFilter方法中,检查
QEvent::MouseButtonDBL单击事件:

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);
    }
}
bool YourWindowClass::eventFilter(QObject*obj,QEvent*event)
{
如果(事件->类型()==QEvent::MouseButtonDblClick)
{
QMouseEvent*mouseeEvent=静态_转换(事件);
qDebug(“鼠标双击%d%d”,mouseEvent->x(),mouseEvent->y());
返回true;
}
其他的
{
返回QMainWindow::eventFilter(对象,事件);
}
}
我希望这会有所帮助。

您可以访问listwidget的viewport小部件,如下所示:

listWidget->viewport()->installEventFilter(this); // "this" could be your window object.
在eventFilter方法中,检查
QEvent::MouseButtonDBL单击事件:

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);
    }
}
bool YourWindowClass::eventFilter(QObject*obj,QEvent*event)
{
如果(事件->类型()==QEvent::MouseButtonDblClick)
{
QMouseEvent*mouseeEvent=静态_转换(事件);
qDebug(“鼠标双击%d%d”,mouseEvent->x(),mouseEvent->y());
返回true;
}
其他的
{
返回QMainWindow::eventFilter(对象,事件);
}
}

我希望这能有所帮助。

谢谢,我想补充一点,因为我有多个QListWidget要检查,所以我还必须检查obj。但由于是QListWiget的视口生成事件,您实际上需要根据您的QListWiget检查obj->parent(),以发现双击了哪个。为此,我只想补充一点,因为我有多个QListWiget要检查,我还必须检查obj。但是,由于生成事件的是QListWiget的视口,因此您实际上需要针对您的QListWiget小部件检查obj->parent(),以发现双击了哪个。