Есть дерево на основе QTreeWidget.
Когда пользователь производил двойной клик по ячейке этого дерева, приходил сигнал itemDoubleClicked()
Теперь мне понадобилось перехватывать клики по пустой области под деревом.
(
Как это правильно организовать ?)
Я пошел по пути перехвата события QEvent::MouseButtonDblClick
Написал класс QxMouseButtonClick, в котором реализован метод eventFilter(...)
Данный класс про инсталлировал на то самое дерево (конкретно на tree->viewport()->installEventFilter(mouseDblClick)
.
Увы, перехватываются все двойные клики, как по пустому пространству под деревом, так и по листьям дерева (второе не желательно). Подскажите,
как правильно будет реализовать метод eventFilter(...), либо вообще следует пойти по другому пути?
class QxMouseButtonClick : public QObject
{
Q_OBJECT
public:
QxMouseButtonClick(QObject *parent=NULL);
protected:
bool eventFilter(QObject *obj, QEvent *event);
};
QxMouseButtonClick ::QxMouseButtonClick (QObject *parent):
QObject(parent)
{
dialog = (QxMainDialog*)parent;
}
bool QxMouseButtonClick ::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::MouseButtonDblClick) {
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
qDebug("Mouse Button Dbl Click");
if(obj==dialog->tree->viewport()){
qDebug("for my tree"); // <-- ловлю все
}
return true;
} else {
// standard event processing
return QObject::eventFilter(obj, event);
}
}
QxMainDialog::QxMainDialog{
//...
mouseDblClick = new QxMouseButtonClick (this);
tree->viewport()->installEventFilter(mouseDblClick);
}