Qt:如何捕捉QDateEdit点击事件?
Qt: How to catch QDateEdit click event?
我正在尝试通过处理 QEvent::MouseButtonRelease
事件来捕捉 QDateEdit
小部件上的鼠标点击,但找不到实现此目的的方法。我试图覆盖父小部件的 QWidget::event
方法,但似乎事件通过子级传递给父级,并且 QDateEdit
在内部处理这些事件而不传播到父级。是否有任何正确的解决方案或解决方法?
QDateEdit
扩展了 QWidget
class。所以你可以继承 QDateEdit
并覆盖 virtual void mouseReleaseEvent(QMouseEvent *event)
函数并在那里做你想做的事。
更新:
函数mouseReleaseEvent
确实无法调用。
尝试为 QDateEdit
中的行编辑安装事件过滤器。示例:
MyDateEdit.h
#include <QDateEdit>
class MyDateEdit : public QDateEdit
{
Q_OBJECT
public:
MyDateEdit(QWidget *parent = 0);
bool eventFilter(QObject* object, QEvent* event) override;
};
MyDateEdit.cpp
#include "MyDateEdit.h"
#include <QDebug>
#include <QEvent>
#include <QLineEdit>
MyDateEdit::MyDateEdit(QWidget *parent) : QDateEdit (parent)
{
installEventFilter(this);
lineEdit()->installEventFilter(this);
}
bool MyDateEdit::eventFilter(QObject* object, QEvent* event)
{
if (object == this || object == lineEdit())
{
if (event->type() == QEvent::MouseButtonRelease)
{
qDebug() << "Mouse release event";
}
}
return QDateEdit::eventFilter(object, event);
}
实现此目的的一种方法是安装事件过滤器。 Qt 文档的 eventFilter section 提供了如何使用它的示例。
您的 window class 应该覆盖 eventFilter
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == dateEdit) {
if (event->type() == QEvent::MouseButtonPress) {
// do what you want to do
// alternatively use QEvent::MouseButtonRelease
return true;
} else {
return false;
}
} else {
// pass the event on to the parent class
return QMainWindow::eventFilter(obj, event);
}
}
在您的 window 构造函数中,在实际的小部件上安装过滤器:
dateEdit->installEventFilter(this);
我正在尝试通过处理 QEvent::MouseButtonRelease
事件来捕捉 QDateEdit
小部件上的鼠标点击,但找不到实现此目的的方法。我试图覆盖父小部件的 QWidget::event
方法,但似乎事件通过子级传递给父级,并且 QDateEdit
在内部处理这些事件而不传播到父级。是否有任何正确的解决方案或解决方法?
QDateEdit
扩展了 QWidget
class。所以你可以继承 QDateEdit
并覆盖 virtual void mouseReleaseEvent(QMouseEvent *event)
函数并在那里做你想做的事。
更新:
函数mouseReleaseEvent
确实无法调用。
尝试为 QDateEdit
中的行编辑安装事件过滤器。示例:
MyDateEdit.h
#include <QDateEdit>
class MyDateEdit : public QDateEdit
{
Q_OBJECT
public:
MyDateEdit(QWidget *parent = 0);
bool eventFilter(QObject* object, QEvent* event) override;
};
MyDateEdit.cpp
#include "MyDateEdit.h"
#include <QDebug>
#include <QEvent>
#include <QLineEdit>
MyDateEdit::MyDateEdit(QWidget *parent) : QDateEdit (parent)
{
installEventFilter(this);
lineEdit()->installEventFilter(this);
}
bool MyDateEdit::eventFilter(QObject* object, QEvent* event)
{
if (object == this || object == lineEdit())
{
if (event->type() == QEvent::MouseButtonRelease)
{
qDebug() << "Mouse release event";
}
}
return QDateEdit::eventFilter(object, event);
}
实现此目的的一种方法是安装事件过滤器。 Qt 文档的 eventFilter section 提供了如何使用它的示例。
您的 window class 应该覆盖 eventFilter
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == dateEdit) {
if (event->type() == QEvent::MouseButtonPress) {
// do what you want to do
// alternatively use QEvent::MouseButtonRelease
return true;
} else {
return false;
}
} else {
// pass the event on to the parent class
return QMainWindow::eventFilter(obj, event);
}
}
在您的 window 构造函数中,在实际的小部件上安装过滤器:
dateEdit->installEventFilter(this);