zty199 1aed5532a3 feat: 限制同标题进程单例运行;网页链接调用浏览器打开
使用 DApplication::setSingleInstance,使用 标题_uid 创建进程锁,单例运行时新进程自动退出,并拉起原有进程主窗口显示;重写 QWebEnginePage,createWindow 时若链接与原来不同,则调用浏览器打开

Log: 支持单例运行;支持浏览器打开外部链接;修复访问深度论坛默认语言错误问题
2022-11-20 15:57:54 +08:00

84 lines
1.9 KiB
C++

#include "widget.h"
#include "webengineview.h"
#include "webenginepage.h"
#include <DApplication>
DWIDGET_USE_NAMESPACE
Widget::Widget(QString szUrl, QWidget *parent)
: QWidget(parent)
, m_webEngineView(new WebEngineView(this))
, m_spinner(new DSpinner(this))
, mainLayout(new QStackedLayout(this))
, m_szUrl(szUrl)
{
m_spinner->setFixedSize(96, 96);
m_webEngineView->setObjectName(QStringLiteral("webEngineView"));
m_webEngineView->setEnabled(true);
m_webEngineView->setAutoFillBackground(false);
DApplication *dApp = qobject_cast<DApplication *>(qApp);
m_webEngineView->setZoomFactor(dApp->devicePixelRatio());
WebEnginePage *page = new WebEnginePage(m_webEngineView);
m_webEngineView->setPage(page);
page->setUrl(QUrl());
if (!m_szUrl.isEmpty()) {
page->setUrl(QUrl(m_szUrl));
}
QWidget *spinnerWidget = new QWidget(this);
QHBoxLayout *spinnerLayout = new QHBoxLayout(spinnerWidget);
spinnerLayout->setMargin(0);
spinnerLayout->setSpacing(0);
spinnerLayout->setAlignment(Qt::AlignCenter);
spinnerLayout->addStretch();
spinnerLayout->addWidget(m_spinner);
spinnerLayout->addStretch();
mainLayout->addWidget(spinnerWidget);
mainLayout->addWidget(m_webEngineView);
connect(m_webEngineView, &QWebEngineView::loadStarted, this, &Widget::on_loadStarted);
connect(m_webEngineView, &QWebEngineView::loadFinished, this, &Widget::on_loadFinished);
}
Widget::~Widget()
{
}
QWebEnginePage *Widget::getPage()
{
return this->m_webEngineView->page();
}
void Widget::goBack()
{
m_webEngineView->back();
}
void Widget::goForward()
{
m_webEngineView->forward();
}
void Widget::refresh()
{
m_webEngineView->reload();
}
void Widget::on_loadStarted()
{
mainLayout->setCurrentIndex(0);
m_spinner->start();
}
void Widget::on_loadFinished()
{
m_spinner->stop();
mainLayout->setCurrentIndex(1);
}