2017-03-28 26 views
0

내 마우스 이벤트를 시뮬레이트하고 싶습니다. 내 Qt WebEngine app.Qt WebEngine 마우스 이벤트 시뮬레이션

나는 PyQt5.8, QT5.8을 사용합니다.

이 내 코드입니다 :

def mouse_click(self, x, y): 
     point = QPoint(int(x), 
        int(y)) 
     eventp = QMouseEvent(QMouseEvent.MouseButtonPress,point,Qt.LeftButton,Qt.LeftButton,Qt.NoModifier) 
     self.sendEvent(eventp) 
     eventp = QMouseEvent(QMouseEvent.MouseButtonRelease,point,Qt.LeftButton,Qt.LeftButton,Qt.NoModifier) 
     self.sendEvent(eventp) 


    def sendEvent(self, event): 
     recipient = self.webpage.view().focusProxy() 
     recipient.grabKeyboard() 
     self.application.sendEvent(recipient, event) 
     recipient.releaseKeyboard() 

내가 그것을 테스트,하지만 작동하지 않습니다. 요소에서 마우스 커서를 확인할 수는 있지만 마우스 클릭 이벤트는 발생하지 않습니다. 누구든지 나를 도울 수 있습니까?

Mac OS 10.12.4를 사용하고 다른 데모를 사용하여 테스트했지만 마우스 이벤트를 잡을 수는 없지만 다른 이벤트를 잡을 수는 있습니다. 어떤 제안? Qt는 5.8를 들어

답변

3

다음 코드를 실행 :

void LeftMouseClick(QWidget* eventsReciverWidget, QPoint clickPos) 
{ 
    QMouseEvent *press = new QMouseEvent(QEvent::MouseButtonPress, 
              clickPos, 
              Qt::LeftButton, 
              Qt::MouseButton::NoButton, 
              Qt::NoModifier); 
    QCoreApplication::postEvent(eventsReciverWidget, press); 
    // Some delay 
    QTimer::singleShot(300, [clickPos, eventsReciverWidget]() { 
     QMouseEvent *release = new QMouseEvent(QEvent::MouseButtonRelease, 
               clickPos, 
               Qt::LeftButton, 
               Qt::MouseButton::NoButton, 
               Qt::NoModifier); 
     QCoreApplication::postEvent(eventsReciverWidget, release); 
    })); 
} 
QWebEngineView webView = new QWebEngineView(); 
// You need to find the first child widget of QWebEngineView. It can accept user input events. 
QWidget* eventsReciverWidget = nullptr; 
foreach(QObject* obj, webView->children()) 
{ 
    QWidget* wgt = qobject_cast<QWidget*>(obj); 
    if (wgt) 
    { 
     eventsReciverWidget = wgt; 
     break; 
    } 
} 
QPoint clickPos(100, 100); 
LeftMouseClick(eventsReciverWidget, clickPos); 
+0

그것은했다! 답장을 보내 주셔서 감사합니다! – bestren