#include "urllineedit.h"
#include "webpage.h"
#include "webpopupwindow.h"
#include "webview.h"
#include <QIcon>
#include <QVBoxLayout>
WebPopupWindow::WebPopupWindow(QWebEngineProfile *profile)
: m_addressBar(new UrlLineEdit(this))
, m_view(new WebView(this))
{
setAttribute(Qt::WA_DeleteOnClose);
setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
QVBoxLayout *layout = new QVBoxLayout;
layout->setMargin(0);
setLayout(layout);
layout->addWidget(m_addressBar);
layout->addWidget(m_view);
m_view->setPage(new WebPage(profile, m_view));
m_view->setFocus();
m_addressBar->setReadOnly(true);
m_addressBar->setFavIcon(QIcon(QStringLiteral(":defaulticon.png")));
connect(m_view, &WebView::titleChanged, this, &QWidget::setWindowTitle);
connect(m_view, &WebView::urlChanged, this, &WebPopupWindow::setUrl);
connect(m_view, &WebView::iconChanged, this, &WebPopupWindow::handleIconChanged);
connect(m_view->page(), &WebPage::geometryChangeRequested, this, &WebPopupWindow::handleGeometryChangeRequested);
connect(m_view->page(), &WebPage::windowCloseRequested, this, &QWidget::close);
}
QWebEngineView *WebPopupWindow::view() const
{
return m_view;
}
void WebPopupWindow::setUrl(const QUrl &url)
{
m_addressBar->setUrl(url);
}
void WebPopupWindow::handleGeometryChangeRequested(const QRect &newGeometry)
{
m_view->setMinimumSize(newGeometry.width(), newGeometry.height());
move(newGeometry.topLeft() - m_view->pos());
// let the layout do the magic
resize(0, 0);
show();
}
void WebPopupWindow::handleIconChanged(const QIcon &icon)
{
m_addressBar->setFavIcon(icon);
}
webpopupwindow.cpp
最新推荐文章于 2019-05-09 17:01:04 发布