【问题标题】:How to make a button press on a point (x, y) in QWidget如何在QWidget中的点(x,y)上按下按钮
【发布时间】: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 项目?

标签: c++ qt qwebview qtestlib


【解决方案1】:

我在 QT 论坛上找到了答案
QWebEngineView 不喜欢鼠标事件,而是我们必须在其中找到第一个子小部件,这是在 QTest::mouseClick() 之前尝试的一些代码:

// find the kid inside QWebEngineView that will accept mouse events
QWidget* childThatAcceptsInput = nullptr;
for (auto w : ui->widget->children())
{
    QWidget* child = qobject_cast<QWidget*>(w);
    if (child)
    {
        childThatAcceptsInput = child;
        break;
    }
}

QTest::mouseClick(childThatAcceptsInput, Qt::LeftButton, Qt::KeyboardModifier::NoModifier, p);

【讨论】:

    猜你喜欢
    • 2013-08-13
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多