Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2435|回复: 2
打印 上一主题 下一主题

linux下32位Qt 5.5.1在Qt Creator中的display widgets里没有QWebView

[复制链接]

1228

主题

1997

帖子

7582

积分

认证用户组

Rank: 5Rank: 5

积分
7582
跳转到指定楼层
楼主
发表于 2018-4-16 17:46:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Qter 于 2018-4-16 17:53 编辑

Windows下的MinGW对应的5.5.1版本是有的。为什么linux没有?
没有QWebView如何打开网页呢?


QWebView 好像是5.4之后就不支持了,之后都用QWebEngineView

在QT5.6及以上,QT不在使用webkit

回复

使用道具 举报

1228

主题

1997

帖子

7582

积分

认证用户组

Rank: 5Rank: 5

积分
7582
沙发
 楼主| 发表于 2018-4-17 09:52:38 | 只看该作者
Qt慢慢淘汰了古老的Webkit ,用WebEngine框架代替掉了。Webengine与webkit不同的是它是基于Chromium引擎的,也就是集成谷歌的引擎。
关于Qt Webkit 的未来,Qt 5.4 beta 的发布公告是这样说的:
Qt 5.4 also contains Qt WebKit. It is still supported, but as of Qt 5.4 we consider it done, so no new functionality will be added to it. We are also planning to deprecate Qt WebKit in future releases, as the new Qt WebEngine provides what is needed. In most use cases, migrating from Qt WebKit to Qt WebEngine is rather straightforward.

再说Webkit的网络层、UI层用的是自己的,bug比较多,比如内存泄露、web兼容性等。基于chromium上的content api封装,投入比较小、html5支持很好、背靠谷歌,不二之选。

不过,截止至目前官方提供的Web框架都没有对Android提供支持,希望Qt开发者加紧脚步啊。


这里做了一个很简单的小示例:
1、pro文件添加如下内容:
QT += webenginewidgets



2、头文件是这样的:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QWebEngineView>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
protected:
    void resizeEvent(QResizeEvent *);
private:
    Ui::MainWindow *ui;
    QWebEngineView* view;
};
#endif // MAINWINDOW_H



3、源文件是这样的:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    view = new QWebEngineView(this);
    view->load(QUrl("http://www.baidu.com/"));
    view->show();
}
MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::resizeEvent(QResizeEvent *)
{
    view->resize(this->size());
}

https://blog.csdn.net/u014597198/article/details/52805425


回复 支持 反对

使用道具 举报

1228

主题

1997

帖子

7582

积分

认证用户组

Rank: 5Rank: 5

积分
7582
板凳
 楼主| 发表于 2018-4-17 10:21:17 | 只看该作者
QtWebkits在Qt5.6以上版本被淘汰了,对于这个接口良且和其他类例如QWebFrame完美结合的组件就这么没了,我只能表示惋惜。对于QtWebEngine新的组件,不得不承认它从Chromium继承过来的强大的性能,但接口上还不是很丰富,和其他类的交互也不是很完美,期待Qt能够对其进行进一步开发,我也会不断的升级Qt,尝试新的接口。
[size=13.3333px]目前而言,QWebEngine有以下缺点:
  • MinGW版本的Qt不支持,即便是Qt5.6版本以上也是不支持的。仅仅支持MSVC版本。
  • 接口暂时不丰富
  • 无法和QWebFrame进行交互(使用了新的QWebChannel和QWebEnginePage组合进行交互)
[size=13.3333px]基于我们的GPS定位项目,参考:[Qt开发北斗定位系统融合百度地图API及Qt程序打包发布] ,我们在该项目中使用的是Qt5.5版本,在嵌入的浏览器作为加载地图用的是QWebKits组件,我们将其升级使用QWebEngine进行加载地图,和HTML和JS进行交互。我们以此为例,进行简要的介绍。
2. 两者的UI上面的区别
[size=13.3333px]你刚刚升级到Qt5.6版本可能在UI设计界面时候在组件中找不到QWebEngineView这个组件,无法从这里拖拽这个组件到你的UI界面上。我查阅了很多资料,看到别人经常使用 ui->webEngineview->...这样,我甚至怀疑是否因为安装了其他版本的Qt影响到了我,我卸载了包含5.6版本的所有Qt,又重新安装了一遍,但是再重启软件后,依然没有发现QWebEngineView这个鬼东西。在Qt5.5中你也能发现有这样的组件QWebView,如图1所示:
[size=13.3333px]
[size=13.3333px]QWebView组件可以通过QWebFrame来进行HTML和JS的通信,如果过渡到QWebEngineView,要是没有这个UI组件的话,我如何把浏览器嵌入到软件界面,实现网页和软件的混合编程呢。根据官方提供的一个例子中,cookiebrowser中找到了答案,这也是官方给的例子中,唯一一个嵌入到网页中的!(不得不说,Qt给的例子很模糊很差!) 经过研究, QWebEngineView使用widget组件,拖拉出来是一个透明的组件,对着组件按右键->promote to.. ->选择QWebEngineView,如图2,完成操作。
[size=13.3333px]
[size=13.3333px]有了QWebEngineView这个UI组件,我们可以在程序中调用其成员、方法和函数完成操作了。

[size=13.3333px]https://blog.csdn.net/amars_ding/article/details/77449660
[size=13.3333px]http://www.cnblogs.com/sigma0/p/7220334.html
[size=13.3333px]https://blog.csdn.net/caoshangpa/article/details/51015483

回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-5-4 16:06 , Processed in 0.057529 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表