如何使用QTestLib [Qt5]模拟鼠标滚轮事件

6

我很高兴地使用QTestLib为基于Qt5的UI编写测试。直到现在,似乎没有缺少功能和方便的功能,但是,当我尝试找到一种模拟鼠标滚轮事件的方法时,出现了问题。

我已经查看了官方文档官方示例,但似乎无法弄清楚如何模拟鼠标滚轮事件。

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


我在一个论坛上找到了这篇10年前的帖子,真心希望自那时以来已经添加了此功能:http://www.qtcentre.org/threads/13436-Wheel-and-QTest - Mr. Developerdude
2个回答

4

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

请看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);
}

1
兄弟,我们已经进入十年俱乐部了 xD - Mr. Developerdude
1
嘿,想象一下我们坐在这里十年后,品尝着我们的网络威士忌,看着一些新手请求Qt420的此功能,告诉他:在我们当时提出这个解决方案时,我们不得不步行到工作站编码,而且还是朝上坡路,双向的。;D更严肃地说:我想知道这是否会被实现,以及何时实现。Qt刚刚收购了froglogic,所以也许QTest很快就会过时,转而使用更复杂、复杂和昂贵的环境。期待着它的到来。 - Baumflaum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接