【问题标题】:How to simulate mouse wheel events using QTestLib [Qt5]如何使用 QTestLib [Qt5] 模拟鼠标滚轮事件
【发布时间】:2021-10-16 15:20:09
【问题描述】:

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

我查看了official documentationofficial example,但似乎不知道如何模拟鼠标滚轮事件。

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

【问题讨论】:

标签: qt qt5 mouseevent mousewheel qtestlib


【解决方案1】:

已经 10 年了,我认为通过在 Qt 的 bug-tracker 上正式提交功能请求来纪念这一时刻是一个不错的方式:

QTBUG-71449

【讨论】:

    【解决方案2】:

    对于 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);
    }
    

    【讨论】:

    • 兄弟,我们在十年俱乐部 xD
    • 是的,想象我们在 10 年后坐在这里,啜饮我们的网络威士忌,看着一些新手请求 Qt420 的这个功能,告诉他:在我们想出这个解决方案的时候,我们不得不步行到我们的工作站在两个方向上上坡进行编码。 ;D 更严肃的一点是:我想知道这是否以及何时实施。 Qt 刚刚收购了 froglogic,所以 QTest 可能很快就会被淘汰,以适应更复杂、更复杂和更昂贵的环境。敬请期待。
    猜你喜欢
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    相关资源
    最近更新 更多