gpt4 book ai didi

qt - 为 QWebEngineView 模拟鼠标点击

转载 作者:行者123 更新时间:2023-12-04 07:52:56 30 4
gpt4 key购买 nike

我想编写一个程序来自动测试不同屏幕尺寸的网页尺寸。我使用 QWebEngineView 创建窗口,我需要模拟用户鼠标在网页中单击并拖放元素。我试过 qApp->sendEvent 和 qApp->postEvent 但没有成功。

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 但网页中的事件没有被触发。我需要先关注 View 吗?它没有 parent ,它是一个窗口。不再使用图形元素。你能帮帮我吗?

Ps:我不想使用 javascript,因为:我无法使用 javascript 模拟点击聚焦输入,它没有坐标来测试拖放 Canvas 。

最佳答案

看来你必须访问QWebEngineView的一个子对象,然后发送事件给它。下面是一个鼠标左键点击的实现。你可以改变位置clickPos来释放和按下模拟拖动。

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?

关于qt - 为 QWebEngineView 模拟鼠标点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40960388/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com