玉兔远程控制 0.1.0-bate6
载入中...
搜索中...
未找到
FrmPopup.cpp
1// Author: Kang Lin <kl222@126.com>
2
3#include <QIcon>
4#include <QVBoxLayout>
5#include <QWebEnginePage>
6#include <QWindow>
7#include <QLoggingCategory>
8#include "FrmPopup.h"
9#include "FrmWebView.h"
10#include "FrmWebBrowser.h"
11
12static Q_LOGGING_CATEGORY(log, "WebBrowser.Widget.Popup")
13CFrmPopup::CFrmPopup(QWebEngineProfile *profile, CFrmWebBrowser* pWebBrowser, QWidget *parent)
14 : QWidget{parent}
15 , m_pleUrl(nullptr)
16 , m_pFavAction(nullptr)
17 , m_pView(nullptr)
18{
19 qDebug(log) << Q_FUNC_INFO;
20 bool check = false;
21 setAttribute(Qt::WA_DeleteOnClose);
22 setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
23
24 this->resize(pWebBrowser->size());
25
26 QVBoxLayout *layout = new QVBoxLayout;
27 layout->setContentsMargins(0, 0, 0, 0);
28 setLayout(layout);
29 m_pleUrl = new QLineEdit(this);
30 m_pFavAction = new QAction(this);
31 layout->addWidget(m_pleUrl);
32 m_pView = new CFrmWebView(pWebBrowser, this);
33 layout->addWidget(m_pView);
34 m_pView->setPage(new QWebEnginePage(profile, m_pView));
35 m_pView->setFocus();
36 m_pleUrl->setReadOnly(true);
37 m_pleUrl->addAction(m_pFavAction, QLineEdit::LeadingPosition);
38 check = connect(m_pView, &CFrmWebView::titleChanged, this, &QWidget::setWindowTitle);
39 Q_ASSERT(check);
40 check = connect(m_pView, &CFrmWebView::urlChanged, [this](const QUrl& url){
41 m_pleUrl->setText(url.toDisplayString());
42 });
43 Q_ASSERT(check);
44 check = connect(m_pView, &CFrmWebView::favIconChanged, m_pFavAction, &QAction::setIcon);
45 Q_ASSERT(check);
46 check = connect(m_pView->page(), &QWebEnginePage::geometryChangeRequested, this, &CFrmPopup::slotHandleGeometryChangeRequested);
47 Q_ASSERT(check);
48 check = connect(m_pView->page(), &QWebEnginePage::windowCloseRequested, this, &QWidget::close);
49 Q_ASSERT(check);
50}
51
52CFrmPopup::~CFrmPopup()
53{
54 qDebug(log) << Q_FUNC_INFO;
55}
56
57CFrmWebView* CFrmPopup::GetView()
58{
59 return m_pView;
60}
61
62void CFrmPopup::slotHandleGeometryChangeRequested(const QRect &newGeometry)
63{
64 if(QWindow* window = windowHandle())
65 setGeometry(newGeometry.marginsRemoved(window->frameMargins()));
66 show();
67 m_pView->setFocus();
68}