QML Webview 使用 x-offset 呈现 SELECT 元素

Posted

技术标签:

【中文标题】QML Webview 使用 x-offset 呈现 SELECT 元素【英文标题】:QML Webview renders SELECT elements with x-offset 【发布时间】:2011-08-18 10:24:48 【问题描述】:

我目前正在实现一个 WebView,它包含一个网页,页面上有一个选择表单元素。每当我单击选择框时,包含可能值的对话框就会出现在页面外。

对话框不在 WebView 或父级中居中。在模拟器上,它显示在网页下拉框的正下方,但太宽而无法在屏幕上显示(遮挡滚动条),而在设备上,它显示在屏幕的左下角。

有人有这方面的经验吗?我只是使用 QML WebView 项目,它不在 Flickable 中(我最初认为这是问题)

背景与调查

两种渲染this page的方法:

一个使用 Qt QWebview 并在模拟器上运行的简单项目给出了这个:

注意:选择菜单是窗口的全宽。

通过一个使用以下 QML 的简单项目:

import QtQuick 1.0
import QtWebKit 1.0

Rectangle 
    anchors.fill: parent

    WebView 
            anchors.fill: parent
            url: "http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_option"
    

会产生以下结果:

我在这里做错了什么?我需要对我的 QML 做些什么才能使其正确呈现菜单?

【问题讨论】:

【参考方案1】:

好的。这感觉不对。

我不敢相信我的板上有一个故事是“作为 Qt 用户,我可以从长列表中选择值”。

所以我对此的解决方案是使用evaluatejavascript 将一大段 Javascript 注入到 Webview 中,它会爬取 DOM 以查找 SELECT 元素。

单击选择时,使用选项列表调用 QML,然后呈现选择框的 QML 版本。

回程更简单,但同样没有吸引力。

我尝试为选择元素添加点击或点击侦听器,但 DOM API 不完整(将尝试查找规范链接),我尝试的任何操作都不会触发处理程序。最后,我把它藏了起来,并在它的位置添加了一个按钮。

必须有更好的方法。

【讨论】:

您找到解决问题的方法了吗?这是错误:bugs.webkit.org/show_bug.cgi?id=113045 这是一个不同的错误。该错误是关于在您进行选择后所选项目未更改的问题。这是渲染菜单本身的问题。这不太可能仍然是一个问题,尽管这是在基于诺基亚 Qt 的手机上,他们不再生产了。

以上是关于QML Webview 使用 x-offset 呈现 SELECT 元素的主要内容,如果未能解决你的问题,请参考以下文章

Windows 上 Webview 的 Qt QML 后备组件

WebView qml 在 iOS 11 上无法正常工作

QML 中基于 WebSockets 的 Qt WebView 和 WebChannel

从 C++ 访问 QML WebView

如何重置QML WebView?

QML WebView相机权限