2016-12-04 33 views
2

さまざまな画面サイズのWebサイズをテストするためのプログラムを作成したいと思います。 QWebEngineViewを使用してウィンドウを作成し、ユーザーのマウスをクリックしてWebページのドロップ要素をドラッグするようにシミュレートする必要があります。 qApp-> sendEventとqApp-> postEventを試しましたが、仕事はしていません。QWebEngineViewのマウスクリックのシミュレーション

QMouseEvent *event1 = new QMouseEvent (QEvent::MouseButtonPress, point, 
Qt::LeftButton, 
Qt::LeftButton, 
Qt::NoModifier); 

qDebug() << qApp->sendEvent (driver, static_cast <QEvent *> (event1)); 

QMouseEvent *event2 = new QMouseEvent (QEvent::MouseButtonRelease, point, 
Qt::LeftButton, 
Qt::LeftButton, 
Qt::NoModifier); 

qDebug() << qApp->sendEvent (driver, static_cast <QEvent *> (event2)); 

どちらのクラスもtrueを返しますが、Webページのイベントはトリガーされません。最初にビューに集中する必要がありますか?親はなく、ウィンドウです。それ以上のグラフィカル要素は使用されません。 私を助けることができますか?

Ps:javascript私はbeacauseを使いたくありません:javascriptのシミュレートされたクリックを使用して入力をフォーカスできません。ドラッグアンドドロップのキャンバスをテストするための座標がありません。

答えて

1

click.Youがpostionsにドラッグをシミュレートリリースとプレス用clickPosを変更することができ、マウスの左の実装であるあなたがQWebEngineViewの子オブジェクトにアクセスして、it.The以下にイベントを送信する必要があると思われます。次の答えから

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

借入Qt WebEngine simulate Mouse Event How to send artificial QKeyEvent to QWebEngineView?

+1

ありがとう!あなたのソリューションは完璧に動作します。 –

関連する問題