我很高兴使用QTestLib
为基于Qt5
小部件的UI编写测试。直到现在,当我试图找到一种模拟鼠标滚轮事件的方法时,似乎都没有缺少功能和便利功能。
我看过official documentation和official example,但似乎无法弄清楚如何模拟鼠标滚轮事件。
这不存在吗?还是我错过了什么? 如何使用QTestLib
创建虚拟鼠标滚轮事件?
答案 0 :(得分:3)
对于 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 :(得分:0)
已经有10年了,我认为通过在Qt的bug跟踪器上正式提交功能请求来标记这种情况将是一个不错的方法:
看到QTBUG-71449。