Qml-带WebEngineView、WebChannel组件程序发布

今天遇到发布qml程序的时候,用windeployqt工具打包完,拷贝到目标机器上运行报缺少VC运行时库

解决方案:

在vc目录下找到vcredist_x64.exe(找自己对应版本),安装(考虑把运行时库同时发布到程序目录或者制作安装程序,同时安装vcredist_x64.exe),重启之后不再报缺少VC运行时库。

接着运行程序挂掉了,提示挂在了Qt5WebEngineCore.dll中,把release程序pro文件修改为config+=console,重新编译,然后用命令行运行。提示qt webengine icu data not found   

Qt WebEngine locales directory not found at location  根据提示发现程序默认找到程序运行目录下,找不到translations/qtwebengine_locales目录(windeployqt打包后的目录结构是这样),

 

解决方案:

把translations/qtwebengine_locales 目录拷贝到程序运行目录,把resources目录下的文件拷贝到程序运行目录。

重新命令运行后程序不再挂,但是webengineView组件没有正确加载出来,提示QtWebChannel moudel not install

解决方案

手动拷贝Qt/qml目录下QtWebChannel目录(可以把debug版的dll去掉)到程序运行目录下,

重新运行,一切正常~

### 解决 QMLWebEngineView 组件无法实现页面跳转的问题 在处理 QML 的 `WebEngineView` 组件遇到的页面跳转问题时,可以采取一些特定的方法来确保页面能够正常加载并响应用户的交互行为。 当尝试通过 `WebEngineView` 加载网页时,如果发现页面跳转功能失效,可能是因为默认的行为被阻止或是未正确配置。为了使页面能够在用户操作下顺利跳转,建议按照如下方法调整: 对于希望监听来自 JavaScript 或者其他方式触发的历史导航事件(比如点击浏览器控件),可以在 QML 文件中定义一个函数用于拦截这些请求,并决定如何进一步处理它们。具体来说,在创建 `WebEngineView` 实例之后,可以通过设置其属性或连接信号槽机制来进行控制[^1]。 下面是一个简单的例子展示怎样捕获历史前进/回退动作并将目标 URL 修改为指定路径: ```qml import QtQuick 2.7 import QtWebEngine 1.4 Item { width: 800; height: 600 WebEngineView { id: webView url: "https://example.com/a.page" onNavigationRequested: { if (request.url === 'https://example.com/b.page') { request.action = WebView.AcceptRequest; // 监听返回按钮按下事件 window.history.back(); // 自动重定向至 b_c.page 页面 setTimeout(function() { webview.load('https://example.com/b_c.page'); }, 50); } else { request.action = WebView.IgnoreRequest; } } } } ``` 此代码片段展示了如何利用 `onNavigationRequested` 处理程序监控即将发生的导航请求,并基于条件执行自定义逻辑。这里假设从 A 站点转向 B 站点后想要自动前往 C 子页,则可在检测到访问 B 后立即安排一次新的加载任务指向最终目的地[^3]。 另外值得注意的是,为了让上述方案生效,还需要确保项目已经包含了必要的模块声明,例如: ```qml import QtWebChannel 1.0 import QtWebEngine 1.5 ``` 这有助于提供完整的 API 支持给应用程序中的各个组件[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值