使用eventFilter 执行此操作。安装在你的mainWindow:
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == this && event->type() == QEvent::Wheel)
{
QWheelEvent *wheelEvent = static_cast<QWheelEvent *>(event);
if(wheelEvent->delta() > 0)
ui->spinBox->setValue(ui->spinBox->value() + 1);
else
ui->spinBox->setValue(ui->spinBox->value() - 1);
}
}
这只是示例,因此您可以根据需要对其进行改进。
或者使用这个:
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == this && event->type() == QEvent::Wheel)
{
QApplication::sendEvent(ui->spinBox,event);
}
}
在本例中,当您检测到滚轮事件时,将其发送到您的旋转框。
但别忘了
protected:
bool eventFilter(QObject *obj, QEvent *event);//in header
和
qApp->installEventFilter(this);//in constructor
推荐DmitrySazonov。当我们的 spinBox 处于焦点时,我们将检测 wheelEvents,当 spinBox 失去焦点时,我们不会对轮子做出反应(其他小部件反应正常)。我们在一个 eventFilter 中执行此操作。为此,请提供新的 bool 变量。例如:
private:
bool spin;//in header
在构造函数中初始化它:
spin = false;
你的 eventFilter 应该是。
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if(obj == ui->spinBox && event->type() == QEvent::FocusIn)
spin = true;
if(spin)
{
if (obj == this && event->type() == QEvent::Wheel)
{
QApplication::sendEvent(ui->spinBox,event);
}
}
if(obj == ui->spinBox && event->type() == QEvent::FocusOut)
spin = false;
}
或者只做这个,没有额外的变量:
if (obj == this && event->type() == QEvent::Wheel)
{
if(ui->spinBox->hasFocus())
QApplication::sendEvent(ui->spinBox,event);
}