【发布时间】:2017-07-31 11:10:56
【问题描述】:
我正在使用 QWebEngineView 为我的项目创建一个 web 视图,所以首先我在 UI 表单中添加一个小部件并将其提升到 QWebEngineView 它现在工作正常我想在这个小部件内的点 x,y 上按下按钮(这是在小部件中查看的网站内的一个按钮) 所以当我从键盘上按下 S 时我做了一个按键,它保存了鼠标悬停在这个小部件内的点(我正好悬停在网站内的按钮上) 我用这段代码来保存积分
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
if (event->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if(keyEvent->key() == Qt::Key_S) {
p = ui->widget->mapFromGlobal(QCursor::pos()); //QPoint varible I use it to save the x,y inside the widget
qDebug() << "point inside the widget = " << p.x() << " " << p.y();
}
}
return QObject::eventFilter(watched, event);
}
然后我按下按钮时应该在 QWebEngineView 小部件内按下按钮我在按钮内使用此代码
QTest::mouseClick(ui->widget, Qt::LeftButton, Qt::KeyboardModifier::NoModifier, p);
//p 保存了按钮在 webview 小部件中的位置 但它没有按下那个按钮或按下这个按钮?那么我的代码有什么问题使它无法按下 webview 内的按钮,或者我不应该为此使用 QTest?
【问题讨论】:
-
确保使用正确的坐标。请注意,
QCursor::pos()返回屏幕坐标中的位置。QTest::mouseClick()需要在小部件坐标系中的位置。 -
是的,我使用正确的坐标,并且我知道 QCursor::pos() 返回屏幕中的位置,所以我使用 ui->Widget->mapFromGlobal 给我在小部件本身中的位置并设置QTestmouseClick 小部件的父级,我确定 QWebEngineView 小部件内网站中按钮的坐标
-
您想在网站内添加QPushbutton的原因是什么?你为什么不在你的 html 中添加一个可点击的项目,使用 js 代码来获取 x,y 位置并通过一些代理对象调用你的 Qt 项目?