找回密码
 立即注册
收起左侧

Qt中使用QWebEngineView 新打开一个页面

3
回复
8825
查看
[复制链接]

尚未签到

来源: 2020-2-21 20:23:11 显示全部楼层 |阅读模式
1Qter豆
在QT中用QWebEngineView显示一个登陆网页,然后在网页中输入用户名和密码,点击登陆后会跳转页面,然后我再页面上点击一个新的链接后,正常来说会新打开一个新网站(新打开,不是跳转)。但是目前不能打开新的网站,并且QT报[8716:8352:0221/201308.884:ERROR:frame_sink_provider_impl.cc(51)] No RenderWidgetHost exists with id 6 in process 3。

大佬们这是什么原因啊?怎么实现新打开一个网站呢?

回复

使用道具 举报

累计签到:161 天
连续签到:1 天
2020-2-22 08:52:41 显示全部楼层
本帖最后由 学到老 于 2020-2-22 13:58 编辑

重载QWebEngineView类中的createWindow函数,这个函数在点击链接后访问, 作用是生成一个新窗口去显示链接内容
回复

使用道具 举报

尚未签到

2020-2-24 11:18:40 显示全部楼层
学到老 发表于 2020-2-22 08:52
重载QWebEngineView类中的createWindow函数,这个函数在点击链接后访问, 作用是生成一个新窗口去显示链接 ...

根据您的指点,重写了createWindow函数,然后直接return this;但是在打开二级界面时还是报错:ASSERT: "m_adapterClient" in file C:/Users/qt/work/qt/qtwebengine/src/core/web_contents_adapter.cpp, line 470

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

累计签到:161 天
连续签到:1 天
2020-2-26 09:35:04 显示全部楼层
本帖最后由 学到老 于 2020-2-26 09:36 编辑

不能return this。
需要return new 出来的刚才子例化的QWebEngineView对象。

这是python实现的代码,可参考:
class View(QWebEngineView):
    def __init__(self,parent = None):
        super().__init__(parent)
        self.load(QUrl("这个链接居然不让发"))
        self.setWindowTitle("New Page")
        self.show()

    # 简单重载了下createWindow函数,实现鼠标点击链接在新窗口打开
    def createWindow(self,type):
        self.newView = View()
        self.newView.resize(900,600)
        return self.newView
更多参考在知乎搜索“PyQt5图形界面编程”也可参考Qt自带的游览器示例
补充:链接不在新窗口中打开的思路
函数:QWebEnginePage * QWebEngineView::page() const
信号:void QWebEnginePage::linkHovered(const QString & url)
利用信号槽在QWebEngineView子类中保存一个成员变量记录鼠标悬浮位置的url,在重载的createWindow函数中load(url),再返回一个空值。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了