gpt4 book ai didi

c++ - 如何发送人工 QKeyEvent 到 QWebEngineView?

转载 作者:可可西里 更新时间:2023-11-01 16:11:18 29 4
gpt4 key购买 nike

上下文:我正在创建一个带有自定义屏幕键盘的小型网络浏览器。

它在 Qt WebKit(QWeb* 类)上几乎可以正常工作,但由于 WebKit 中的错误而导致崩溃...在 Qt 5.4.0 之后不会修复,因为它们是转向 Qt WebEngine。

所以我决定按照简短的 webkit->webengine 转换指南将这些东西移动到 Qt WebEngine(QWebEngine* 类)。在关于 QWebElement 的警告部分之后,我一直在努力显示/隐藏屏幕键盘(现在需要运行 async.JS 代码)。但我对如何将人工按键事件发送到网页摸不着头脑。

我已经尝试了一些东西:

  • QCoreApplication::postEvent(m_webview, event) 在使用旧的 QWeb 东西时不做任何事情;
  • 可以通过运行 JavaScript 来发送 key ,但我觉得这太脏了

谢谢,

最佳答案

尽管最初的问题已经存在一年了,但对于那些像我一样决定(终于!)从 QWebKit 迁移到 QWebEngine (Qt 5.5 - 5.6b) 的人来说仍然是现实的。这是一个肮脏的解决方案,需要现有的 webenginepage->view()。这是针对鼠标事件的,如果它不针对键盘事件也不足为奇:

void Whatever::sendMouseEvent( QObject* targetObj, QMouseEvent::Type type, const QPoint& pnt ) const
{
QMouseEvent event( type, pnt, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier );
QApplication::sendEvent( targetObj, &event );
}

void Whatever::sendMouseClick( QObject* targetObj, const QPoint& pnt ) const
{
sendMouseEvent( targetObj, QMouseEvent::MouseMove, pnt );
sendMouseEvent( targetObj, QMouseEvent::MouseButtonPress, pnt );
sendMouseEvent( targetObj, QMouseEvent::MouseButtonRelease, pnt );
}

void Whatever::emulateMouseClick( const QPoint& pnt ) const
{
//-- right now (Qt 5.5 & 5.6) there is only one child -
//-- QtWebEngineCore::RenderWidgetHostViewQtDelegateWidget
//-- but it could change in future
Q_FOREACH( QObject* obj, mWebEnPage->view()->children() ) //-- ACHTUNG! Check mWebEnPage->view() in real code!
if( qobject_cast<QWidget*>( obj ) )
sendMouseClick( obj, pnt );
}

灵感来自 Using QWebEngine to render an imageHow can I get paint events with QtWebEngine?和谷歌搜索。

关于c++ - 如何发送人工 QKeyEvent 到 QWebEngineView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27894769/

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