我试图通过处理QDateEdit事件来捕捉鼠标单击QEvent::MouseButtonRelease小部件,但无法找到方法。我试图覆盖父部件的QWidget::event方法,但是事件似乎会通过子部件传递给父部件,而QDateEdit在内部处理这些事件而不传播到父部件。是否有正确的解决方案或解决办法?
发布于 2019-04-04 08:52:20
QDateEdit扩展了一个QWidget类。因此,您可以继承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);
}发布于 2019-04-04 09:34:05
其中一种方法是安装一个eventFilter。Qt文档的eventFilter剖面提供了一个如何使用它的示例。
您的窗口类应该覆盖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);
}
}在窗口构造函数中,在实际的小部件上安装过滤器:
dateEdit->installEventFilter(this);https://stackoverflow.com/questions/55511113
复制相似问题