如何防止QWebEngineView专注于setHtml(...)和加载(...)调用?

Rim*_*mas 3 qt focus qtwebengine

我用QTreeView和创建了简单的Qt窗口布局QWebEngineView:在树视图中选择一些项目之后,Web引擎视图显示了一些内容.问题是何时QWebEngineView::setHtml(...)load(...)称为树视图失去键盘焦点,Web引擎视图获取它.在树视图中选择带键盘的项目时,这会造成困难.那么,如何防止树视图焦点丢失?

我试着用QTextBrowser而不是QWebEngineView.它没有这个问题,但它不适用于复杂的HTML页面.

Rim*_*mas 6

假设我们有:

QWebEngineView *webView = new QWebEngineView;
Run Code Online (Sandbox Code Playgroud)

对于Qt 5.8而且永远不会

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

webView->settings()->setAttribute(QWebEngineSettings::FocusOnNavigationEnabled, false);
Run Code Online (Sandbox Code Playgroud)

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

参考文献:

对于Qt 5.7及更早版本

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

webView->setEnabled(false);
Run Code Online (Sandbox Code Playgroud)

但这会禁用键盘输入webView.

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

  1. 最初,它禁用webView(webView->setEnabled(false)),这样可以防止采取集中load(...),setHtml(...)调用.
  2. FocusWidget获得焦点,它能够并转发到集中webView,所以使得键盘输入.
  3. webView它的孩子失去焦点时,再次FocusWidget禁用webView

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