2017-03-28 3 views
0

Ich möchte Maus Ereignis in meiner Qt WebEngine App simulieren.Qt WebEngine simulieren Maus Ereignis

Ich verwende PyQt5.8, QT5.8.

Dies ist mein Code:

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() 

ich es testen, aber es funktioniert nicht. Ich kann den Mauszeiger auf dem Element bestätigen, aber kein Mausklick-Ereignis ist aufgetreten. Kann mir jemand helfen?

Ich benutze Mac OS 10.12.4, ich teste es mit einer anderen Demo, ich finde, ich kann Mouse Event nicht fangen, aber ich kann andere Ereignisse abfangen. Irgendwelche Vorschläge?

Antwort

3

Für Qt 5.8 Ausführen des folgenden Code:

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

Es hat funktioniert! Danke für deine Antwort! – bestren