如何在 Qt Creator 中为 QPushButton 添加悬停事件?

How to add hovered event for QPushButton in Qt Creator?

我正在 Qt Creator 中创建一个项目。

I wanna add hovered event for a QPushButton which is created in design mode.

但是当我点击 go to slot 选项(显示可用事件)时,我看不到 hovered(). that's what I can see

当我在 Whosebug 上搜索这个问题时,我发现了这个 (source):

QPushButton#pushButton:hover {
background-color: rgb(224, 255, 0);
}

还有我的问题:

How to implement this on Qt Creator (when the QPushButton is created in design mode)?

提前致谢,祝你有美好的一天:)

你应该使用 event filter:

看这个例子,我在mainwindow.ui中添加了一个按钮,并添加了eventFilter虚函数。

别忘了您应该 installEventFilter 在您的 pushButton

mainwindow.h中:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui
{
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow: public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);

    ~MainWindow();

    // QObject interface

public:
    bool  eventFilter(QObject *watched, QEvent *event);

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

并在 mainwindow.cpp 中:

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QEvent>

MainWindow::MainWindow(QWidget *parent):
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->pushButton->installEventFilter(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

bool  MainWindow::eventFilter(QObject *watched, QEvent *event)
{
    if ((watched == ui->pushButton) && (event->type() == QEvent::HoverEnter))
    {
        qDebug() << "Button is hovered !";
    }

    return false;
}

结果是: