写点什么

Qt | 实现获取网站图标和网页缩放 QWebEngineView

作者:YOLO.
  • 2022 年 9 月 07 日
    河北
  • 本文字数:1251 字

    阅读完需:约 4 分钟

Qt | 实现获取网站图标和网页缩放 QWebEngineView

前言:

每个网站都有一个 Logo 图标,它一般显示在网站标题的前面,这个图标文件是可以获取到的。下面介绍了获取图标文件的方法。

QWebEngineView 实现的网页内容是可以进行缩放的,下面介绍了听过 Ctrl++、Ctrl--和 Ctrl+0 实现放大、缩小和重置的功能。

获取网站图标文件:

网站的图标可以使用 QWebEngineView 的 iconUrl() 函数返回该图标的 url,然后使用网络访问接口类来获取图标文件。

因为使用到网络访问,所以要在.h 文件中添加前置类 QNetworkAccessManager,网络访问的详细使用方法可以参考其他的文章。

  • 当加载的网站图标发生变化时,QWebEngineView 会发射 iconUrlChanged() 信号,所以通过关联 iconUrlChanged()信号来获取图标的 url。

connect(view, &QWebEngineView::iconUrlChanged, this, &MainWindow::handleIconUrlChanged());
复制代码

获取到图标的 url 后,通过 QNetworkAccessManager 调用 get()函数来获取图标文件。

void MainWindow::handleIconUrlChanged(const QUrl &url){    QNetworkRequest iconRequest(url);    QNetworkReply *iconReply = manager->get(iconRequest);    iconReply->setParent(this);    connect(iconReply, &QNetworkReply::finished, this, &MainWindow::handleIconLoaded);}
void MainWindow::handleIconLoaded(){ QIcon icon; QNetworkReply *iconReply = qobject_cast<QNetworkReply *>(sender()); if(iconReply && iconReply->error() == QNetworkReply::NoError) { QByteArray data = iconReply->readAll(); QPixmap pixmap; pixmap.loadFromData(data); icon.addPixmap(pixmap); iconReply->deleteLater(); }else{ icon = QIcon(QStringLiteral("../image/defaulticon.png")); } setWindowIcon(icon);}
复制代码

实现网页内容的放大、缩小、重置:

使用 QWebEngineView 的 setZoomFactor(qreal factor) 函数可以实现网页内容的缩放,其中,factor 是缩放因子,它的取值范围是 0.25~5.0,表示最大可以放大到 500%,最小可以缩小到 25%。可以通过 zoomFactor() 函数获取网页内容现在的缩放因子是多少。

QMenu *viewMenu = new QMenu(tr("查看"));//放大QAction *zoomIn = viewMenu->addAction(tr("放大"));zoomIn->setShortcurt(QKeySequence(Qt::CTRL | Qt::Key_Plus));connect(zoomIn, &QAction::triggered, [this](){    view->setZoomFactor(view->zoomFactor() + 0.1);//放大1%});//缩小QAction *zoomOut = viewMenu->addAction(tr("缩小"));zoomOut->setShortcurt(QKeySequence(Qt::CTRL | Qt::Key_Minus));connect(zoomOut, &QAction::triggered, [this](){    view->setZoomFactor(view->zoomFactor() - 0.1);//缩小1%});//重置QAction *resetZoom = viewMenu->addAction(tr("重置"));resetZoom->setShortcurt(QKeySequence(Qt::CTRL | Qt::Key_0));connect(resetZoom, &QAction::triggered, [this](){    view->setZoomFactor(1.0);//缩小1%});menuBar()->addMenu(viewMenu);
复制代码


发布于: 刚刚阅读数: 3
用户头像

YOLO.

关注

还未添加个人签名 2022.05.06 加入

还未添加个人简介

评论

发布
暂无评论
Qt | 实现获取网站图标和网页缩放 QWebEngineView_qt_YOLO._InfoQ写作社区