2013-12-15 3 views
3

Я хочу моделирования событий мыши с Qt. Например, когда я нажимаю один ключ на клавиатуре, программа может имитировать событие щелчка мыши. Я попытался код ниже, но когда я нажимаю «K», программа останавливается и дает мне ошибку:Как имитировать событие мыши с Qt?

The program has unexpectedly finished.

 
    case Qt::Key_K: 
     QMouseEvent *mEvnPress; 
     QMouseEvent *mEvnRelease; 
     mEvnPress = new QMouseEvent(QEvent::MouseButtonPress, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); 
     mEvnRelease = new QMouseEvent(QEvent::MouseButtonRelease, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); 
     QCoreApplication::sendEvent(QWidget::focusWidget(),mEvnPress); 
     QCoreApplication::sendEvent(QWidget::focusWidget(),mEvnRelease); 
     break; 

+0

Есть ли еще с этой ошибкой? Это крушение? Что происходит, когда вы запускаете его с помощью отладчика или QtCreator? Остановится ли она на определенной линии? – sFuller

+0

Он может нормально работать и отображать главное окно в qtcreator. И нет никакого выхода без «Программа неожиданно закончила». когда я нажимаю клавишу «K» и дисплей основного окна. – Tairy

+0

Первый параметр sendEvent кажется нечетным. Вы отправляете событие в виджет, который был в последний раз сосредоточен. Может ли focusWidget вернуть NULL? Возможно, вам стоит попробовать отправить его в главное окно и посмотреть, работает ли это. – sFuller

ответ

2

есть QtTestLib. Он предназначен для написания теста, и он имеет mouseClick, который делает то, что вы хотите.

Если вы не хотите использовать этот модуль, вы всегда можете проверить его исходный код и посмотреть, как правильно имитировать события мыши.

0

Вы должны использовать класс QtestEventList. Добавьте событие с addmouseclick, затем имитируйте.

Смежные вопросы