【发布时间】:2021-01-26 15:35:24
【问题描述】:
QPushButton被禁用时如何强制mouseMoveEvent?
我在 QScrollArea 上禁用了 QPushButton,并且在滑动时 mouseMoveEvent 没有被触发。
【问题讨论】:
标签: qt qt5 mousemove disabled-control
QPushButton被禁用时如何强制mouseMoveEvent?
我在 QScrollArea 上禁用了 QPushButton,并且在滑动时 mouseMoveEvent 没有被触发。
【问题讨论】:
标签: qt qt5 mousemove disabled-control
你可以像这样使用eventFilter:
主窗口.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
bool eventFilter(QObject *obj, QEvent *event) override;
};
#endif // MAINWINDOW_H
主窗口.cpp
#include "mainwindow.h"
#include <QMouseEvent>
#include <QHBoxLayout>
#include <QDebug>
#include <QPushButton>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QPushButton *button = new QPushButton{this};
button->installEventFilter(this);
button->setMouseTracking(true);
button->setText("bla");
button->setDisabled(true);
QWidget *widget = new QWidget{this};
QHBoxLayout *layout = new QHBoxLayout{widget};
layout->setContentsMargins(50, 50, 50, 50);
layout->addWidget(button);
this->setCentralWidget(widget);
}
MainWindow::~MainWindow()
{
}
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::MouseMove)
{
qDebug() << "mouse move" << static_cast<QMouseEvent*>(event)->pos();
return true;
}
else
return QMainWindow::eventFilter(obj, event);
}
【讨论】:
qDebug() << "mouse move" << static_cast<QMouseEvent*>(event)->pos(); 为我工作。