如何使用QTestLib模拟鼠标滚轮事件【Qt5】

How to simulate mouse wheel events using QTestLib [Qt5]

我很高兴使用 QTestLib 为我的 Qt5 基于 UI 的小部件编写测试。直到现在,当我试图找到一种模拟鼠标滚轮事件的方法时,似乎并不缺少特性和便利功能。

我看过 official documentation, and an official example 但我似乎无法弄清楚如何模拟鼠标滚轮事件。

这不存在吗?或者我错过了什么? 我应该如何使用 QTestLib 创建虚拟鼠标滚轮事件?

已经 10 年了,我认为通过在 Qt 的错误跟踪器上正式提交功能请求来纪念这一时刻是一个很好的方式:

QTBUG-71449.

致 10 年后遇到这个问题的任何人。我们为 Qt4.8 的测试套件编写了一个实现(也在 Qt5.6 中测试过,一如既往没有保证):

void TestUtility::mouseWheelTurn(
    QWidget *widget, // The most top level widget; a MainWindow in our case
    int delta,       // As in QWheelEvent
    QPoint pos,      // Mouseposition in the moment of scrolling relative to top level widget
    Qt::MouseButtons buttons, // As in QWheelEvent
    Qt::KeyboardModifiers modifiers, // As in QWheelEvent
    Qt::Orientation orientation, // As in QWheelEvent
    int delay)       // As in other QTest functions
{
    QWidget *toWheelChild = widget->childAt(pos);

    if(toWheelChild == NULL) return;

    pos = widget->mapToGlobal(pos);
    pos = toWheelChild->mapFromGlobal(pos);

    QTest::mouseMove(toWheelChild, pos);

    QTest::qWait(delay);
    QWheelEvent *wheelEvent = 
        new QWheelEvent(pos, delta, buttons, modifiers, orientation);
    QApplication::instance()->postEvent(toWheelChild, wheelEvent);
}