Как имитировать события колесика мыши с помощью QTestLib [Qt5]

Я с удовольствием использую QTestLib для написания тестов для своего пользовательского интерфейса на основе Qt5 виджетов. Казалось, недостатка в функциях и удобных функциях не было до сих пор, пока я не попытался найти способ имитировать события колесика мыши.

Я просмотрел официальную документацию и официальный пример, но я не могу понять, как имитировать колесико мыши Мероприятия.

Разве этого не существует? Или я что-то упускаю? Как создать фиктивные события колесика мыши с помощью QTestLib?


person Lennart Rolland    schedule 23.06.2018    source источник
comment
Я нашел этот пост 10-летней давности на форуме, очень надеюсь, что с тех пор он был добавлен: qtcentre.org/threads/13436-Wheel-and-QTest   -  person Lennart Rolland    schedule 23.06.2018


Ответы (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);
}
person Baumflaum    schedule 13.07.2021
comment
Бро, мы в клубе десятилетий xD - person Lennart Rolland; 13.07.2021
comment
Ага, представьте, что мы сидим здесь через 10 лет, попивая наш кибервиски и наблюдая, как какой-то новичок запрашивает эту функцию для Qt420, говоря ему: в наше время, когда мы придумали это решение, нам приходилось идти к нашей рабочей станции, чтобы кодировать, в гору, в оба направления. ;D А если серьезно: интересно, будет ли это реализовано и когда. Qt только что приобрел froglogic, поэтому, возможно, QTest скоро устареет из-за более запутанной, сложной и дорогой среды. С нетерпением жду этого. - person Baumflaum; 14.07.2021

Прошло 10 лет, и я подумал, что было бы неплохо отметить это событие, официально отправив запрос функции в системе отслеживания ошибок для Qt:

Вот QTBUG-71449.

person Lennart Rolland    schedule 27.10.2018