mainwindow.cpp
来自「奇趣公司比较新的qt/emd版本」· C++ 代码 · 共 826 行 · 第 1/2 页
CPP
826 行
delete dlg;}void MainWindow::updateBookmarkMenu(){ for(QList<MainWindow*>::Iterator it = windows.begin(); it != windows.end(); ++it) (*it)->setupBookmarkMenu();}void MainWindow::setupBookmarkMenu(){ ui.bookmarkMenu->clear(); bookmarks.clear(); ui.bookmarkMenu->addAction(ui.actionAddBookmark); QFile f(QDir::homePath() + QLatin1String("/.assistant/bookmarks.") + Config::configuration()->profileName()); if (!f.open(QFile::ReadOnly)) return; QTextStream ts(&f); ui.bookmarkMenu->addSeparator(); while (!ts.atEnd()) { QString title = ts.readLine(); QString link = ts.readLine(); bookmarks.insert(ui.bookmarkMenu->addAction(title), link); }}void MainWindow::showBookmark(QAction *action){ if (bookmarks.contains(action)) showLink(bookmarks.value(action));}void MainWindow::showLinkFromClient(const QString &link){ setWindowState(windowState() & ~Qt::WindowMinimized); raise(); activateWindow(); QString l = MainWindow::urlifyFileName(link); showLink(l); if (isMinimized()) showNormal();}void MainWindow::showLink(const QString &link){ if(link.isEmpty()) qWarning("The link is empty!"); // don't fill the history with the same url more then once if (link == tabs->currentBrowser()->source().toString()) return; QUrl url(link); QFileInfo fi(url.toLocalFile()); tabs->setSource(url.toString()); tabs->currentBrowser()->setFocus();}void MainWindow::showLinks(const QStringList &links){ if (links.size() == 0) { qWarning("MainWindow::showLinks() - Empty link"); return; } if (links.size() == 1) { showLink(MainWindow::urlifyFileName(links.first())); return; } QStringList::ConstIterator it = links.begin(); // Initial showing, The tab is empty so update that without creating it first if (!tabs->currentBrowser()->source().isValid()) { QPair<HelpWindow*, QString> browser; browser.first = tabs->currentBrowser(); browser.second = links.first(); pendingBrowsers.append(browser); tabs->setTitle(tabs->currentBrowser(), tr("...")); } ++it; while(it != links.end()) { QPair<HelpWindow*, QString> browser; browser.first = tabs->newBackgroundTab(); browser.second = *it; pendingBrowsers.append(browser); ++it; } startTimer(50); return;}void MainWindow::removePendingBrowser(HelpWindow *win){ if (!pendingBrowsers.count()) return; QMutableListIterator<QPair<HelpWindow*, QString> > it(pendingBrowsers); while (it.hasNext()) { QPair<HelpWindow*, QString> browser = it.next(); if (browser.first == win) { it.remove(); break; } }}void MainWindow::timerEvent(QTimerEvent *e){ QPair<HelpWindow*, QString> browser = pendingBrowsers.first(); pendingBrowsers.pop_front(); if (pendingBrowsers.size() == 0) killTimer(e->timerId()); browser.first->setSource(MainWindow::urlifyFileName(browser.second));}void MainWindow::showQtHelp(){ showLink(QLibraryInfo::location(QLibraryInfo::DocumentationPath) + QLatin1String("/html/index.html"));}MainWindow* MainWindow::newWindow(){ saveSettings(); MainWindow *mw = new MainWindow; mw->move(geometry().topLeft()); if (isMaximized()) mw->showMaximized(); else mw->show(); mw->on_actionGoHome_triggered(); return mw;}void MainWindow::saveSettings(){ Config *config = Config::configuration(); config->setSideBarPage(helpDock->tabWidget()->currentIndex()); config->setWindowGeometry(saveGeometry()); config->setMainWindowState(saveState()); // Create list of the tab urls QStringList lst; QList<HelpWindow*> browsers = tabs->browsers(); foreach (HelpWindow *browser, browsers) lst << browser->source().toString(); config->setSource(lst); config->save();}TabbedBrowser* MainWindow::browsers() const{ return tabs;}void MainWindow::showSearchLink(const QString &link, const QStringList &terms){ HelpWindow * hw = tabs->currentBrowser(); hw->blockScrolling(true); hw->setCursor(Qt::WaitCursor); if (hw->source() == link) hw->reload(); else showLink(link); hw->setCursor(Qt::ArrowCursor); hw->viewport()->setUpdatesEnabled(false); QTextCharFormat marker; marker.setForeground(Qt::red); QTextCursor firstHit; QTextCursor c = hw->textCursor(); c.beginEditBlock(); foreach (QString term, terms) { c.movePosition(QTextCursor::Start); hw->setTextCursor(c); bool found = hw->find(term, QTextDocument::FindWholeWords); while (found) { QTextCursor hit = hw->textCursor(); if (firstHit.isNull() || hit.position() < firstHit.position()) firstHit = hit; hit.mergeCharFormat(marker); found = hw->find(term, QTextDocument::FindWholeWords); } } if (firstHit.isNull()) { firstHit = hw->textCursor(); firstHit.movePosition(QTextCursor::Start); } firstHit.clearSelection(); c.endEditBlock(); hw->setTextCursor(firstHit); hw->blockScrolling(false); hw->viewport()->setUpdatesEnabled(true);}void MainWindow::showGoActionLink(){ const QObject *origin = sender(); if(!origin || QString::fromLatin1(origin->metaObject()->className()) != QString::fromLatin1("QAction")) return; QAction *action = (QAction*) origin; QString docfile = *(goActionDocFiles->find(action)); showLink(MainWindow::urlifyFileName(docfile));}void MainWindow::on_actionHelpAssistant_triggered(){ showLink(Config::configuration()->assistantDocPath() + QLatin1String("/assistant-manual.html"));}HelpDialog* MainWindow::helpDialog() const{ return helpDock;}void MainWindow::backwardAvailable(bool enable){ ui.actionGoPrevious->setEnabled(enable);}void MainWindow::forwardAvailable(bool enable){ ui.actionGoNext->setEnabled(enable);}void MainWindow::updateProfileSettings(){ Config *config = Config::configuration();#ifndef Q_WS_MAC setWindowIcon(config->applicationIcon());#endif ui.helpMenu->clear(); //ui.helpMenu->addAction(ui.actionHelpAssistant); //ui.helpMenu->addSeparator(); ui.helpMenu->addAction(ui.actionAboutAssistant); if (!config->aboutApplicationMenuText().isEmpty()) ui.helpMenu->addAction(ui.actionAboutApplication); ui.helpMenu->addSeparator(); ui.helpMenu->addAction(ui.actionHelpWhatsThis); ui.actionAboutApplication->setText(config->aboutApplicationMenuText()); if(!config->title().isNull()) setWindowTitle(config->title());}void MainWindow::setupPopupMenu(QMenu *m){ m->addAction(ui.actionNewWindow); m->addAction(ui.actionOpenPage); m->addAction(ui.actionClosePage); m->addSeparator(); m->addAction(ui.actionSaveAs); m->addSeparator(); m->addAction(ui.actionGoPrevious); m->addAction(ui.actionGoNext); m->addAction(ui.actionGoHome); m->addSeparator(); m->addAction(ui.actionZoomIn); m->addAction(ui.actionZoomOut); m->addSeparator(); m->addAction(ui.actionEditCopy); m->addAction(ui.actionEditFind);}void MainWindow::on_actionSyncToc_triggered(){ HelpWindow *w = tabs->currentBrowser(); if(w) { qApp->setOverrideCursor(QCursor(Qt::WaitCursor)); QString link = w->source().toString(); helpDock->locateContents(link); helpDock->tabWidget()->setCurrentIndex(0); qApp->restoreOverrideCursor(); }}void MainWindow::on_actionNewWindow_triggered(){ newWindow()->show();}void MainWindow::on_actionClose_triggered(){ close();}void MainWindow::on_actionHelpWhatsThis_triggered(){ QWhatsThis::enterWhatsThisMode();}void MainWindow::on_actionSaveAs_triggered(){ QString fileName; QUrl url = tabs->currentBrowser()->source(); if (url.isValid()) { QFileInfo fi(url.toLocalFile()); fileName = fi.fileName(); } fileName = QFileDialog::getSaveFileName(this, tr("Save Page"), fileName); if (fileName.isEmpty()) return; QFile file(fileName); if (!file.open(QIODevice::WriteOnly)) { QMessageBox::critical(this, tr("Save Page"), tr("Cannot open file for writing!")); return; } QFileInfo fi(fileName); QString fn = fi.fileName(); int i = fn.lastIndexOf(QLatin1Char('.')); if (i > -1) fn = fn.left(i); QString relativeDestPath = fn + QLatin1String("_images"); QDir destDir(fi.absolutePath() + QDir::separator() + relativeDestPath); bool imgDirAvailable = destDir.exists(); if (!imgDirAvailable) imgDirAvailable = destDir.mkdir(destDir.absolutePath()); // save images QTextDocument *doc = tabs->currentBrowser()->document()->clone(); if (url.isValid() && imgDirAvailable) { QTextBlock::iterator it; for (QTextBlock block = doc->begin(); block != doc->end(); block = block.next()) { for (it = block.begin(); !(it.atEnd()); ++it) { QTextFragment fragment = it.fragment(); if (fragment.isValid()) { QTextImageFormat fm = fragment.charFormat().toImageFormat(); if (fm.isValid() && !fm.name().isEmpty()) { QUrl imagePath = tabs->currentBrowser()->source().resolved(fm.name()); if (!imagePath.isValid()) continue; QString from = imagePath.toLocalFile(); QString destName = fm.name(); int j = destName.lastIndexOf(QLatin1Char('/')); if (j > -1) destName = destName.mid(j+1); QFileInfo info(from); if (info.exists()) { if (!QFile::copy(from, destDir.absolutePath() + QDir::separator() + destName)) continue; fm.setName(QLatin1String("./") + relativeDestPath + QLatin1String("/") + destName); QTextCursor cursor(doc); cursor.setPosition(fragment.position()); cursor.setPosition(fragment.position() + fragment.length(), QTextCursor::KeepAnchor); cursor.setCharFormat(fm); } } } } } } QString src = doc->toHtml(QByteArray("utf-8")); QTextStream s(&file); s.setCodec("utf-8"); s << src; s.flush(); file.close();}void MainWindow::showFontSettingsDialog(){ Config *config = Config::configuration(); FontSettings settings = config->fontSettings(); { // It is important that the dialog be deleted before UI mode changes. FontSettingsDialog dialog; if (!dialog.showDialog(&settings)) return; } config->setFontPointSize(settings.browserFont.pointSizeF()); config->setFontSettings(settings); updateApplicationFontSettings(settings);}void MainWindow::updateApplicationFontSettings(FontSettings &settings){ QFont font = settings.windowFont; if (this->font() != font) qApp->setFont(font, "QWidget"); font = settings.browserFont; QList<HelpWindow*> browsers = tabs->browsers(); foreach (HelpWindow *browser, browsers) { if (browser->font() != font) browser->setFont(font); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?