⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trwindow.cpp

📁 QT 开发环境里面一个很重要的文件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
        QMessageBox::warning(this, tr("Qt Linguist"),            tr("Cannot read from phrase book '%1'.").arg(name));        return false;    }    QAction *a = m_ui.menuClosePhraseBook->addAction(pb.friendlyPhraseBookName());    phraseBooks[PhraseCloseMenu].insert(a, pb);    a->setWhatsThis(tr("Close this phrase book."));    a = m_ui.menuEditPhraseBook->addAction(pb.friendlyPhraseBookName());    phraseBooks[PhraseEditMenu].insert(a, pb);    a->setWhatsThis(tr("Allow you to add, modify, or delete"        " phrases of this phrase book."));    a = m_ui.menuPrintPhraseBook->addAction(pb.friendlyPhraseBookName());    phraseBooks[PhrasePrintMenu].insert(a, pb);    a->setWhatsThis(tr("Print the entries of the phrase"        " book."));        updatePhraseDict();    m_ui.actionBatchTranslation->setEnabled(phraseBooks[PhraseCloseMenu].count() > 0);    return true;}bool TrWindow::savePhraseBook(QString &name, const PhraseBook &pb){    if (!name.contains(".qph") && !name.contains("."))        name += ".qph";    if (!pb.save(name)) {        QMessageBox::warning(this, tr("Qt Linguist"),            tr("Cannot create phrase book '%1'.").arg(name));        return false;    }    return true;}void TrWindow::updateProgress(){    int numNonobsolete = cmdl->getNumNonobsolete();    int numFinished = cmdl->getNumFinished();    if (numNonobsolete == 0)        progress->setText(QString("    " "    "));    else        progress->setText(QString(" %1/%2 ").arg(numFinished)        .arg(numNonobsolete));    m_ui.actionPrevUnfinished->setEnabled(numFinished != numNonobsolete);    m_ui.actionNextUnfinished->setEnabled(numFinished != numNonobsolete);    m_ui.actionPrev->setEnabled(cmdl->contextsInList() > 0);    m_ui.actionNext->setEnabled(cmdl->contextsInList() > 0);}void TrWindow::updatePhraseDict(){    phraseDict.clear();    foreach (PhraseBook pb, phraseBooks[PhraseCloseMenu]) {        foreach (Phrase p, pb) {            QString f = friendlyString(p.source());            if ( f.length() > 0 ) {                f = f.split(QChar(' ')).first();                if (!phraseDict.contains(f)) {                    PhraseBook pbe;                    phraseDict.insert(f, pbe);                }                phraseDict[f].append(p);            }        }    }    revalidate();}PhraseBook TrWindow::getPhrases(const QString &source){    PhraseBook phrases;    QString f = friendlyString(source);    QStringList lookupWords = f.split(QChar(' '));    foreach (QString s, lookupWords) {        if (phraseDict.contains(s)) {            PhraseBook ent = phraseDict.value(s);            foreach (Phrase p, ent) {                if (f.indexOf(friendlyString((p).source())) >= 0)                    phrases.append(p);            }        }    }    return phrases;}void TrWindow::printDanger(MessageItem *m){    danger(m, true);}bool TrWindow::updateDanger(MessageItem *m, bool verbose){    bool dngr = danger(m, verbose);    if (dngr != m->danger())        m->setDanger(dngr);    return dngr;}bool TrWindow::danger( const MessageItem *m,                       bool verbose ){    QString source = m->sourceText();    QStringList translations = m->translations();    if (m_ui.actionAccelerators->isChecked()) {        bool sk = source.contains(Qt::Key_Ampersand);        bool tk = true;        for (int i = 0; i < translations.count() && tk; ++i) {            tk &= bool(translations[i].contains(Qt::Key_Ampersand));        }        if (!sk && tk) {            if (verbose)                statusBar()->showMessage(tr("Accelerator possibly superfluous in"                                         " translation."), ErrorMS);            return true;        } else if (sk && !tk) {            if (verbose)                statusBar()->showMessage(tr("Accelerator possibly missing in"                                         " translation."), ErrorMS);            return true;        }    }    if (m_ui.actionEndingPunctuation->isChecked()) {        bool endingok = true;        for (int i = 0; i < translations.count() && endingok; ++i) {            endingok &= (ending( source, cmdl->language()) == ending(translations[i], cmdl->language() ));        }        if (!endingok) {            if (verbose)                statusBar()->showMessage(tr("Translation does not end with the"                    " same punctuation as the source text."), ErrorMS);            return true;        }    }    if (m_ui.actionPhraseMatches->isChecked()) {        QString fsource = friendlyString(source);        QString ftranslation = friendlyString(translations.first());        QStringList lookupWords = fsource.split(QChar(' '));        bool phraseFound;        foreach (QString s, lookupWords) {            if (phraseDict.contains(s)) {                PhraseBook ent = phraseDict.value(s);                phraseFound = false;                foreach (Phrase p, ent) {                    if (fsource.indexOf(friendlyString(p.source())) < 0 ||                        ftranslation.indexOf(friendlyString(p.target())) >= 0) {                        phraseFound = true;                        break;                    }                }                if (!phraseFound) {                    if (verbose)                        statusBar()->showMessage(tr("A phrase book suggestion for"                            " '%1' was ignored.").arg(s), ErrorMS );                    return true;                }            }        }    }    if (m_ui.actionPlaceMarkerMatches->isChecked()) {        // Stores the occurence count of the place markers in the vector placeMarkerIndexes.        // i.e. the occurence count of %1 is stored at placeMarkerIndexes[1],         // count of %2 is stored at placeMarkerIndexes[2] etc.        // In the first pass, it counts all place markers in the sourcetext.        // In the second pass it (de)counts all place markers in the translation.        // When finished, all elements should have returned to a count of 0, if not there is a mismatch        // between place markers in the source text and the translation text.        QVector<int> placeMarkerIndexes;        QString translation;        int numTranslations = translations.count();        for (int pass = 0; pass < numTranslations + 1; ++pass) {            const QChar *uc_begin = source.unicode();            const QChar *uc_end = uc_begin + source.length();            if (pass >= 1) {                translation = translations[pass - 1];                uc_begin = translation.unicode();                uc_end = uc_begin + translation.length();            }            const QChar *c = uc_begin;            while (c < uc_end) {                if (c->unicode() == '%') {                    const QChar *escape_start = ++c;                    while (c->isDigit()) ++c;                    const QChar *escape_end = c;                    bool ok = true;                    int markerIndex = QString::fromRawData(escape_start, escape_end - escape_start).toInt(&ok);                    if (ok) {                        if (markerIndex >= placeMarkerIndexes.size()) {                            placeMarkerIndexes.resize(markerIndex + 1);                        }                        placeMarkerIndexes[markerIndex]+= (pass == 0 ? numTranslations : -1);                    }                }                ++c;            }        }        for (int i = 0; i < placeMarkerIndexes.size(); ++i) {            if (placeMarkerIndexes.at(i) != 0) {                if (verbose)                    statusBar()->showMessage(tr("Translation does not refer"                        " to the same place markers as in the source text."), ErrorMS);                return true;            }        }            }    if (verbose)        statusBar()->clearMessage();    return false;}void TrWindow::readConfig(){    QString keybase(QString::number((QT_VERSION >> 16) & 0xff)                    + "." + QString::number((QT_VERSION >> 8) & 0xff) + "/");    QSettings config;    QRect r( pos(), size() );    recentFiles = config.value(keybase + "RecentlyOpenedFiles").toStringList();    restoreGeometry(config.value(keybase + "Geometry/WindowGeometry").toByteArray());    restoreState(config.value(keybase + "MainWindowState").toByteArray());    m_ui.actionAccelerators->setChecked(config.value(keybase+ "Validators/Accelerator", true).toBool());    m_ui.actionEndingPunctuation->setChecked(config.value(keybase+ "Validators/EndingPunctuation", true).toBool());    m_ui.actionPhraseMatches->setChecked(config.value(keybase+ "Validators/PhraseMatch", true).toBool());    m_ui.actionPlaceMarkerMatches->setChecked(config.value(keybase+ "Validators/PlaceMarkers", true).toBool());}void TrWindow::writeConfig(){    QString keybase(QString::number( (QT_VERSION >> 16) & 0xff ) +                     "." + QString::number( (QT_VERSION >> 8) & 0xff ) + "/" );    QSettings config;    config.setValue(keybase + "RecentlyOpenedFiles", recentFiles);    config.setValue(keybase + "Geometry/WindowGeometry", saveGeometry());    config.setValue(keybase+ "Validators/Accelerator", m_ui.actionAccelerators->isChecked());    config.setValue(keybase+ "Validators/EndingPunctuation", m_ui.actionEndingPunctuation->isChecked());    config.setValue(keybase+ "Validators/PhraseMatch", m_ui.actionPhraseMatches->isChecked());    config.setValue(keybase+ "Validators/PlaceMarkers", m_ui.actionPlaceMarkerMatches->isChecked());    config.setValue(keybase + "MainWindowState", saveState());}void TrWindow::setupRecentFilesMenu(){    m_ui.menuRecentlyOpenedFiles->clear();    if (recentFiles.count() > 0) {        m_ui.menuRecentlyOpenedFiles->setEnabled(true);        QStringList::Iterator it = recentFiles.begin();        for (; it != recentFiles.end(); ++it) {            m_ui.menuRecentlyOpenedFiles->addAction(*it);        }    } else {        m_ui.menuRecentlyOpenedFiles->setEnabled(false);    }}void TrWindow::recentFileActivated(QAction *action){    if (!action->text().isEmpty()) {        if (maybeSave())            openFile(action->text());    }}void TrWindow::addRecentlyOpenedFile(const QString &fn, QStringList &lst){    QFileInfo fi(fn);    if (lst.contains(fi.absoluteFilePath()))        return;    if ( lst.count() >= 10 )        lst.removeLast();    lst.prepend(fi.absoluteFilePath());}void TrWindow::toggleGuessing(){    me->toggleGuessing();}void TrWindow::focusSourceList(){    stv->setFocus();}void TrWindow::focusPhraseList(){    ptv->setFocus();}void TrWindow::toggleStatistics(){    if (m_ui.actionStatistics->isChecked()) {        if (!stats) {            stats = new Statistics(this);            connect(cmdl, SIGNAL(statsChanged(int,int,int,int,int,int)), stats,                SLOT(updateStats(int,int,int,int,int,int)));        }        stats->show();        updateStatistics();    }    else if (stats) {        stats->close();    }}void TrWindow::updateStatistics(){    // don't call this if stats dialog is not open    // because this can be slow...    if (!stats || !stats->isVisible())        return;    cmdl->updateStatistics();}void TrWindow::finishedBatchTranslation(){    updateStatistics();    updateProgress();    updateCaption();}QStringList TrWindow::findFormFilesInCurrentTranslationFile(){    QStringList ret;    for (MessageModel::iterator it = cmdl->begin(); it != cmdl->end(); ++it) {        QString fileName = (*it)->message().fileName();        if (fileName.endsWith(QLatin1String(".ui"))) {            if (!ret.contains(fileName)) {                ret+=fileName;            }        }    }    return ret;}void TrWindow::previewForm(){    if (m_previewTool.isNull()) {        m_previewTool = new TrPreviewTool();        QStringList fileNames = findFormFilesInCurrentTranslationFile();        bool ok = true;        for (QStringList::iterator it = fileNames.begin(); it != fileNames.end(); ++it) {            QString fileName = *it;            if (!fileName.isEmpty() && QFileInfo(fileName).exists()) {                if (!m_previewTool->addFormFile(fileName)) {                    ok = false;                    break;                }            }        }        if (ok) {            ok = m_previewTool->addTranslator(cmdl->translator(), QFileInfo(filename).fileName());            if (ok) {                m_previewTool->cascade();            } else {                QMessageBox::warning(this, tr("Qt Linguist"), tr("There was a problem in the preparation of form preview."));            }        }    } else {        // Only do a refresh if it is already open        m_previewTool->reloadTranslations();    }    m_previewTool->show();}void TrWindow::showTranslationSettings(){    if (!m_translationSettingsDialog) {        m_translationSettingsDialog = new TranslationSettingsDialog(this); 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -