qt - 如何防止 QWebEngineView 将注意力集中在 setHtml(...) 和 load(...) 调用上?

标签 qt focus qtwebengine

我用 QTreeViewQWebEngineView 创建了简单的 Qt 窗口布局:在 TreeView 中选择一些项目后,Web 引擎 View 会显示一些内容。问题是当调用 QWebEngineView::setHtml(...)load(...) 时, TreeView 会失去键盘焦点,而 Web 引擎 View 会得到它。这会导致在 TreeView 中使用键盘选择项目时遇到困难。那么,如何防止 TreeView 焦点丢失呢?

我尝试使用 QTextBrowser 而不是 QWebEngineView。没有这个问题,但是不适合复杂的HTML页面。

最佳答案

假设我们有:

QWebEngineView *webView = new QWebEngineView;

对于 Qt 5.8 和更新版本

这个问题可以通过调整设置来解决:

webView->settings()->setAttribute(QWebEngineSettings::FocusOnNavigationEnabled, false);

示例代码:https://github.com/rmisev/FocusWidget/tree/if-qt-5.8

引用文献:

对于 Qt 5.7 及更早版本

最简单的解决方案(@Netrix 也指出)是调用:

webView->setEnabled(false);

但这会禁用 webView 的键盘输入。

为了解决这个问题,我创建了简单的 FocusWidget 类作为 webView 的父窗口小部件,其工作原理如下:

  1. 最初它会禁用 webView (webView->setEnabled(false)),因此可以防止将注意力集中在 load(...) , setHtml(...) 调用。
  2. FocusWidget 获得焦点时,它启用并将焦点转发到 webView,因此启用键盘输入。
  3. webView 及其子项失去焦点时,FocusWidget 会再次禁用 webView

源代码和示例应用程序:https://github.com/rmisev/FocusWidget

关于qt - 如何防止 QWebEngineView 将注意力集中在 setHtml(...) 和 load(...) 调用上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36609489/

相关文章:

c# - 检测焦点的变化并找到它 C#

python - 使用 QtWebChannel 的 folium 弹出窗口

qt5 - 是否可以在屏幕外呈现 QWebEnginePage/QWebEngineView?

qt - 项目错误: Unknown module(s) in QT: webengine

c++ - 如何修复QT中的GL.h编译错误?

c++ - Qml/Qt/C++ : QQuickView in a QWidget - Need Background Transparency

java - 自定义 FocusTraversalPolicy 类 Java Swing

android - 将 nextFocus 设置为 @null 不起作用

c++ - 访问 QStackedWidget 中的小部件

qt - C++ Qt - 如何将 "-std=c++11"添加到 qmake 生成的 makefile 中?