diff options
author | Jüri Valdmann <juri.valdmann@qt.io> | 2017-06-12 15:57:31 +0200 |
---|---|---|
committer | Kai Koehne <kai.koehne@qt.io> | 2017-07-19 10:16:37 +0000 |
commit | a71efecbcc6f714d619a922a0eaa665a3c68a3b2 (patch) | |
tree | 8d6770e40c83a0b4ef3f6cbff4f7d8a1adf77324 /examples/webenginewidgets/simplebrowser/browserwindow.cpp | |
parent | ae71f77d5f680d8b40c9598321a687318a7ff0b2 (diff) | |
download | qtwebengine-a71efecbcc6f714d619a922a0eaa665a3c68a3b2.tar.gz |
Update Simple Browser example
- Accept downloads and add a downloads list.
- Fix toolbar icons being pixelated on hidpi screens by
- enabling attribute AA_UseHighDpiPixmaps, and
- replacing the 22x22 icons with 32x32 versions.
- Move favicon selection to WebView to reduce duplication.
- Replace UrlLineEdit with a standard QLineEdit using a QAction for the favicon
and setClearButtonEnabled(true) for the clear button.
- Fix bug where the "File -> New Tab" action would create background tabs
because the QAction::triggered(bool) signal was connected to the
TabWidget::createTab(bool) slot with the bool argument having a completely
different meaning between the two.
- Make the toolbar unmovable. Nobody wants to move the toolbar.
- Add tooltips to toolbar buttons.
- Add tooltips to the tab bar (page titles).
- Stop adding icons to menu items only to disable them right after.
Task-number: QTBUG-60655
Change-Id: I10cc0fa82dbf39281bbdbbf9ef901e1b26402f80
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
Diffstat (limited to 'examples/webenginewidgets/simplebrowser/browserwindow.cpp')
-rw-r--r-- | examples/webenginewidgets/simplebrowser/browserwindow.cpp | 109 |
1 files changed, 44 insertions, 65 deletions
diff --git a/examples/webenginewidgets/simplebrowser/browserwindow.cpp b/examples/webenginewidgets/simplebrowser/browserwindow.cpp index 0b85e2bb0..43c25e633 100644 --- a/examples/webenginewidgets/simplebrowser/browserwindow.cpp +++ b/examples/webenginewidgets/simplebrowser/browserwindow.cpp @@ -40,12 +40,13 @@ #include "browser.h" #include "browserwindow.h" +#include "downloadmanagerwidget.h" #include "tabwidget.h" -#include "urllineedit.h" #include "webview.h" #include <QApplication> #include <QCloseEvent> #include <QDesktopWidget> +#include <QEvent> #include <QFileDialog> #include <QInputDialog> #include <QMenuBar> @@ -54,9 +55,10 @@ #include <QStatusBar> #include <QToolBar> #include <QVBoxLayout> +#include <QWebEngineProfile> -BrowserWindow::BrowserWindow(QWidget *parent, Qt::WindowFlags flags) - : QMainWindow(parent, flags) +BrowserWindow::BrowserWindow(Browser *browser) + : m_browser(browser) , m_tabWidget(new TabWidget(this)) , m_progressBar(new QProgressBar(this)) , m_historyBackAction(nullptr) @@ -64,10 +66,11 @@ BrowserWindow::BrowserWindow(QWidget *parent, Qt::WindowFlags flags) , m_stopAction(nullptr) , m_reloadAction(nullptr) , m_stopReloadAction(nullptr) - , m_urlLineEdit(new UrlLineEdit(this)) + , m_urlLineEdit(nullptr) + , m_favAction(nullptr) { - setToolButtonStyle(Qt::ToolButtonFollowStyle); setAttribute(Qt::WA_DeleteOnClose, true); + setFocusPolicy(Qt::ClickFocus); QToolBar *toolbar = createToolBar(); addToolBar(toolbar); @@ -85,7 +88,7 @@ BrowserWindow::BrowserWindow(QWidget *parent, Qt::WindowFlags flags) m_progressBar->setMaximumHeight(1); m_progressBar->setTextVisible(false); - m_progressBar->setStyleSheet(QStringLiteral("QProgressBar {border: 0px } QProgressBar::chunk { background-color: red; }")); + m_progressBar->setStyleSheet(QStringLiteral("QProgressBar {border: 0px} QProgressBar::chunk {background-color: #da4453}")); layout->addWidget(m_progressBar); layout->addWidget(m_tabWidget); @@ -97,15 +100,14 @@ BrowserWindow::BrowserWindow(QWidget *parent, Qt::WindowFlags flags) statusBar()->showMessage(url); }); connect(m_tabWidget, &TabWidget::loadProgress, this, &BrowserWindow::handleWebViewLoadProgress); - connect(m_tabWidget, &TabWidget::urlChanged, this, &BrowserWindow::handleWebViewUrlChanged); - connect(m_tabWidget, &TabWidget::iconChanged, this, &BrowserWindow::handleWebViewIconChanged); connect(m_tabWidget, &TabWidget::webActionEnabledChanged, this, &BrowserWindow::handleWebActionEnabledChanged); - connect(m_urlLineEdit, &QLineEdit::returnPressed, this, [this]() { - m_urlLineEdit->setFavIcon(QIcon(QStringLiteral(":defaulticon.png"))); - loadPage(m_urlLineEdit->url()); + connect(m_tabWidget, &TabWidget::urlChanged, [this](const QUrl &url) { + m_urlLineEdit->setText(url.toDisplayString()); + }); + connect(m_tabWidget, &TabWidget::favIconChanged, m_favAction, &QAction::setIcon); + connect(m_urlLineEdit, &QLineEdit::returnPressed, [this]() { + m_tabWidget->setUrl(QUrl::fromUserInput(m_urlLineEdit->text())); }); - - m_urlLineEdit->setFavIcon(QIcon(QStringLiteral(":defaulticon.png"))); QAction *focusUrlLineEditAction = new QAction(this); addAction(focusUrlLineEditAction); @@ -114,14 +116,10 @@ BrowserWindow::BrowserWindow(QWidget *parent, Qt::WindowFlags flags) m_urlLineEdit->setFocus(Qt::ShortcutFocusReason); }); - handleWebViewTitleChanged(tr("Qt Simple Browser")); + handleWebViewTitleChanged(QString()); m_tabWidget->createTab(); } -BrowserWindow::~BrowserWindow() -{ -} - QSize BrowserWindow::sizeHint() const { QRect desktopRect = QApplication::desktop()->screenGeometry(); @@ -134,18 +132,16 @@ QMenu *BrowserWindow::createFileMenu(TabWidget *tabWidget) QMenu *fileMenu = new QMenu(tr("&File")); fileMenu->addAction(tr("&New Window"), this, &BrowserWindow::handleNewWindowTriggered, QKeySequence::New); - QAction *newTabAction = new QAction(QIcon(QLatin1String(":addtab.png")), tr("New &Tab"), this); + QAction *newTabAction = new QAction(tr("New &Tab"), this); newTabAction->setShortcuts(QKeySequence::AddTab); - newTabAction->setIconVisibleInMenu(false); connect(newTabAction, &QAction::triggered, tabWidget, &TabWidget::createTab); fileMenu->addAction(newTabAction); fileMenu->addAction(tr("&Open File..."), this, &BrowserWindow::handleFileOpenTriggered, QKeySequence::Open); fileMenu->addSeparator(); - QAction *closeTabAction = new QAction(QIcon(QLatin1String(":closetab.png")), tr("&Close Tab"), this); + QAction *closeTabAction = new QAction(tr("&Close Tab"), this); closeTabAction->setShortcuts(QKeySequence::Close); - closeTabAction->setIconVisibleInMenu(false); connect(closeTabAction, &QAction::triggered, [tabWidget]() { tabWidget->closeTab(tabWidget->currentIndex()); }); @@ -156,8 +152,8 @@ QMenu *BrowserWindow::createFileMenu(TabWidget *tabWidget) connect(closeAction, &QAction::triggered, this, &QWidget::close); fileMenu->addAction(closeAction); - connect(fileMenu, &QMenu::aboutToShow, [closeAction]() { - if (Browser::instance().windows().count() == 1) + connect(fileMenu, &QMenu::aboutToShow, [this, closeAction]() { + if (m_browser->windows().count() == 1) closeAction->setText(tr("&Quit")); else closeAction->setText(tr("&Close Window")); @@ -288,7 +284,7 @@ QMenu *BrowserWindow::createWindowMenu(TabWidget *tabWidget) menu->addAction(previousTabAction); menu->addSeparator(); - QVector<BrowserWindow*> windows = Browser::instance().windows(); + QVector<BrowserWindow*> windows = m_browser->windows(); int index(-1); for (auto window : windows) { QAction *action = menu->addAction(window->windowTitle(), this, &BrowserWindow::handleShowWindowTriggered); @@ -311,7 +307,7 @@ QMenu *BrowserWindow::createHelpMenu() QToolBar *BrowserWindow::createToolBar() { QToolBar *navigationBar = new QToolBar(tr("Navigation")); - navigationBar->setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea); + navigationBar->setMovable(false); navigationBar->toggleViewAction()->setEnabled(false); m_historyBackAction = new QAction(this); @@ -328,6 +324,7 @@ QToolBar *BrowserWindow::createToolBar() m_historyBackAction->setShortcuts(backShortcuts); m_historyBackAction->setIconVisibleInMenu(false); m_historyBackAction->setIcon(QIcon(QStringLiteral(":go-previous.png"))); + m_historyBackAction->setToolTip(tr("Go back in history")); connect(m_historyBackAction, &QAction::triggered, [this]() { m_tabWidget->triggerWebPageAction(QWebEnginePage::Back); }); @@ -345,6 +342,7 @@ QToolBar *BrowserWindow::createToolBar() m_historyForwardAction->setShortcuts(fwdShortcuts); m_historyForwardAction->setIconVisibleInMenu(false); m_historyForwardAction->setIcon(QIcon(QStringLiteral(":go-next.png"))); + m_historyForwardAction->setToolTip(tr("Go forward in history")); connect(m_historyForwardAction, &QAction::triggered, [this]() { m_tabWidget->triggerWebPageAction(QWebEnginePage::Forward); }); @@ -355,22 +353,22 @@ QToolBar *BrowserWindow::createToolBar() m_tabWidget->triggerWebPageAction(QWebEnginePage::WebAction(m_stopReloadAction->data().toInt())); }); navigationBar->addAction(m_stopReloadAction); + + m_urlLineEdit = new QLineEdit(this); + m_favAction = new QAction(this); + m_urlLineEdit->addAction(m_favAction, QLineEdit::LeadingPosition); + m_urlLineEdit->setClearButtonEnabled(true); navigationBar->addWidget(m_urlLineEdit); - int size = m_urlLineEdit->sizeHint().height(); - navigationBar->setIconSize(QSize(size, size)); - return navigationBar; -} -void BrowserWindow::handleWebViewIconChanged(const QIcon &icon) -{ - m_urlLineEdit->setFavIcon(icon); -} + auto downloadsAction = new QAction(this); + downloadsAction->setIcon(QIcon(QStringLiteral(":go-bottom.png"))); + downloadsAction->setToolTip(tr("Show downloads")); + navigationBar->addAction(downloadsAction); + connect(downloadsAction, &QAction::triggered, [this]() { + m_browser->downloadManagerWidget().show(); + }); -void BrowserWindow::handleWebViewUrlChanged(const QUrl &url) -{ - m_urlLineEdit->setUrl(url); - if (url.isEmpty()) - m_urlLineEdit->setFocus(); + return navigationBar; } void BrowserWindow::handleWebActionEnabledChanged(QWebEnginePage::WebAction action, bool enabled) @@ -389,7 +387,7 @@ void BrowserWindow::handleWebActionEnabledChanged(QWebEnginePage::WebAction acti m_stopAction->setEnabled(enabled); break; default: - qWarning("Unhandled webActionChanged singal"); + qWarning("Unhandled webActionChanged signal"); } } @@ -403,9 +401,7 @@ void BrowserWindow::handleWebViewTitleChanged(const QString &title) void BrowserWindow::handleNewWindowTriggered() { - BrowserWindow *window = new BrowserWindow(); - Browser::instance().addWindow(window); - window->loadHomePage(); + m_browser->createWindow(); } void BrowserWindow::handleFileOpenTriggered() @@ -414,7 +410,7 @@ void BrowserWindow::handleFileOpenTriggered() tr("Web Resources (*.html *.htm *.svg *.png *.gif *.svgz);;All files (*.*)")); if (file.isEmpty()) return; - loadPage(file); + currentTab()->setUrl(file); } void BrowserWindow::handleFindActionTriggered() @@ -450,24 +446,6 @@ void BrowserWindow::closeEvent(QCloseEvent *event) deleteLater(); } -void BrowserWindow::loadHomePage() -{ - loadPage(QStringLiteral("http://www.qt.io")); -} - -void BrowserWindow::loadPage(const QString &page) -{ - loadPage(QUrl::fromUserInput(page)); -} - -void BrowserWindow::loadPage(const QUrl &url) -{ - if (url.isValid()) { - m_urlLineEdit->setUrl(url); - m_tabWidget->setUrl(url); - } -} - TabWidget *BrowserWindow::tabWidget() const { return m_tabWidget; @@ -483,23 +461,24 @@ void BrowserWindow::handleWebViewLoadProgress(int progress) static QIcon stopIcon(QStringLiteral(":process-stop.png")); static QIcon reloadIcon(QStringLiteral(":view-refresh.png")); - if (progress < 100 && progress > 0) { + if (0 < progress && progress < 100) { m_stopReloadAction->setData(QWebEnginePage::Stop); m_stopReloadAction->setIcon(stopIcon); m_stopReloadAction->setToolTip(tr("Stop loading the current page")); + m_progressBar->setValue(progress); } else { m_stopReloadAction->setData(QWebEnginePage::Reload); m_stopReloadAction->setIcon(reloadIcon); m_stopReloadAction->setToolTip(tr("Reload the current page")); + m_progressBar->setValue(0); } - m_progressBar->setValue(progress < 100 ? progress : 0); } void BrowserWindow::handleShowWindowTriggered() { if (QAction *action = qobject_cast<QAction*>(sender())) { int offset = action->data().toInt(); - QVector<BrowserWindow*> windows = Browser::instance().windows(); + QVector<BrowserWindow*> windows = m_browser->windows(); windows.at(offset)->activateWindow(); windows.at(offset)->currentTab()->setFocus(); } |