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 + -
显示快捷键?