#include "mainwindow.h" #include "ui_mainwindow.h" #include MainWindow::MainWindow(QSettings *settings, QUrl defaultUrl, QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), navigationToolBar(new QToolBar(this)), tabToolBar(new QToolBar(this)), tabBar(new WebViewTabBar(this)), urlLineEdit(new QLineEdit(navigationToolBar)) { settings->beginGroup("defaults"); ui->setupUi(this); resize(settings->value("width", 800).toInt(), settings->value("height", 600).toInt()); // Populate the menu bar // Browser menu - with new window, new tab, open and quit QMenu *browserMenu = new QMenu(tr("Browser"), ui->menuBar); browserMenu->addAction(tr("Quit"), qApp, SLOT(quit()), QKeySequence(tr("Ctrl+Q"))); browserMenu->addAction(tr("New Tab"), this, SLOT(createNewTab()), QKeySequence(tr("Ctrl+T"))); ui->menuBar->addMenu(browserMenu); // View menu - fullscreen // Page menu - what page actions? // Help menu - help contents, about, about qt this->addToolBar(Qt::TopToolBarArea, navigationToolBar); this->addToolBarBreak(Qt::TopToolBarArea); this->addToolBar(Qt::TopToolBarArea, tabToolBar); navigationToolBar->addWidget(urlLineEdit); connect(urlLineEdit, SIGNAL(returnPressed()), this, SLOT(handleUrlChanged())); tabToolBar->addWidget(tabBar); connect(tabBar, SIGNAL(currentTabChanged(QWebEngineView*)), this, SLOT(handleTabChanged(QWebEngineView*))); if(!defaultUrl.isEmpty()) createNewTab(defaultUrl); else createNewTab(settings->value("url", QUrl("http://duckduckgo.com")).toUrl()); settings->endGroup(); // "defaults" } MainWindow::~MainWindow() { delete ui; } void MainWindow::createNewTab(const QUrl &url) { QWebEngineView *view = new QWebEngineView(0); view->load(url); tabBar->addTab(view); } void MainWindow::handleTabChanged(QWebEngineView *view) { centralWidget()->setParent(0); disconnect(centralWidget()); setCentralWidget(view); connect(view, SIGNAL(urlChanged(QUrl)), this, SLOT(handleUrlUpdated(QUrl))); this->handleUrlUpdated(view->url()); } void MainWindow::handleUrlChanged() { tabBar->currentView()->load(QUrl::fromUserInput(urlLineEdit->text())); } void MainWindow::handleUrlUpdated(const QUrl &url) { urlLineEdit->setText(url.toString()); }