Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
前言:
每个网站都有一个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);