如何在 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;
}
结果是:
我正在 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;
}
结果是: