gpt4 book ai didi

c++ - 当光标不在 QSpinBox 上时,使 QSpinBox 对鼠标滚轮事件使用react

转载 作者:太空宇宙 更新时间:2023-11-04 16:13:03 25 4
gpt4 key购买 nike

我正在使用 Qt 5.3.2Qt Creator 3.2.1MinGW 4.8.2Windows 7 .我有一个 QSpinBox并且仅当鼠标悬停在 QSpinBox 上时才能使用鼠标滚轮更改其值.如果鼠标不在 QSpinBox 上, 滚动鼠标滚轮没有效果,即使 QSpinBox还是有重点的。我需要做什么才能更改 QSpinBox 中的值即使鼠标没有悬停在鼠标滚轮上也有焦点?设置mouseTrackingtrue没有那个效果。

最佳答案

使用 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);
}
}

在这个例子中,当你检测到 wheel 事件时,你将它发送到你的 spinbox。

但别忘了

protected:
bool eventFilter(QObject *obj, QEvent *event);//in header

qApp->installEventFilter(this);//in constructor

正如 DmitrySazonov 推荐的那样。当我们的 spinBox 处于焦点时,我们将检测 wheelEvents,当 spinBox 失去焦点时,我们不会对 wheel 使用react(其他小部件 react 正常)。我们在一个 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);
}

关于c++ - 当光标不在 QSpinBox 上时,使 QSpinBox 对鼠标滚轮事件使用react,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26041471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com