Qt 中的事件处理程序

Qur*_*ben 2 c++ qt

我正在尝试在 Qt 中实现鼠标悬停效果,但我不知道如何使用事件处理程序。我创建了一个带有按钮的简单 Qt Widget 应用程序。我可以将事件处理程序绑定到 MainWindow,如下所示:

MainWindow::enterEvent(QEvent *event)
{
    ui->pushButton_3->setGraphicsEffect(effect);
}
Run Code Online (Sandbox Code Playgroud)

这有效,graphicsEffect 被应用到pushButton。但我不明白如何将事件处理程序绑定到单个 QObject。据我所知,不可能使用信号,因为它们只支持单击事件,不支持鼠标悬停事件。

我对 Qt 还很陌生,我找不到任何我能理解的信息。

谁能向我解释如何将事件处理程序绑定到单个 QObject?

提前致谢。

Qur*_*ben 6

我通过使用 QtCreator 中的“升级到...”选项以另一种方式解决了这个问题。正如这里所解释的:http://sector.ynet.sk/qt4-tutorial/customing-widgets.html

我添加了一个类“MyPushButton”:

mypushbutton.h

#ifndef MYPUSHBUTTON_H
#define MYPUSHBUTTON_H

#include <QPushButton>
#include <QGraphicsDropShadowEffect>

class MyPushButton : public QPushButton
{
    Q_OBJECT
public:
    MyPushButton(QWidget *parent = 0);

private:
    void enterEvent(QEvent *e);
    void leaveEvent(QEvent *e);

    QGraphicsDropShadowEffect *effect;
};

#endif // MYPUSHBUTTON_H
Run Code Online (Sandbox Code Playgroud)

mypushbutton.cpp

#include "mypushbutton.h"

MyPushButton::MyPushButton(QWidget *parent)
    :QPushButton(parent)
{
    effect = new QGraphicsDropShadowEffect();
    effect->setBlurRadius(5);
    effect->setEnabled(false);
    this->setGraphicsEffect(effect);
}

void MyPushButton::enterEvent(QEvent *event)
{
    if (this->isEnabled())
        effect->setEnabled(true);
}

void MyPushButton::leaveEvent(QEvent *event)
{
    if (this->isEnabled())
        effect->setEnabled(false);
}
Run Code Online (Sandbox Code Playgroud)

然后我在编辑器中右键单击 QPushButton,选择“升级到...”,并将 MyPushButton 添加为“升级类名称”。

它的工作方式就像一个魅力,并且非常容易扩展或定制,因为它适用于任何事件。