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

📄 batchtranslationdialog.cpp

📁 QT 开发环境里面一个很重要的文件
💻 CPP
字号:
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the Qt Linguist of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "batchtranslationdialog.h"#include <QtCore>#include <QtGui>#include <QtGui/QProgressDialog>#include "phrase.h"#include "messagemodel.h"CheckableListModel::CheckableListModel(QObject *parent) : QStandardItemModel(parent){}Qt::ItemFlags CheckableListModel::flags(const QModelIndex &/*index*/) const{    return Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable;}BatchTranslationDialog::BatchTranslationDialog(MessageModel *model, QWidget *w) : QDialog(w), m_model(this), m_messagemodel(model){    m_ui.setupUi(this);    connect(m_ui.runButton, SIGNAL(clicked()), this, SLOT(startTranslation()));    connect(m_ui.cancelButton, SIGNAL(clicked()), this, SLOT(reject()));    connect(m_ui.moveUpButton, SIGNAL(clicked()), this, SLOT(movePhraseBookUp()));    connect(m_ui.moveDownButton, SIGNAL(clicked()), this, SLOT(movePhraseBookDown()));        m_ui.phrasebookList->setModel(&m_model);    m_ui.phrasebookList->setSelectionBehavior(QAbstractItemView::SelectItems);    m_ui.phrasebookList->setSelectionMode(QAbstractItemView::SingleSelection);}void BatchTranslationDialog::setPhraseBooks(const QList<PhraseBook> &phrasebooks){    m_model.clear();    m_model.insertColumn(0);    m_phrasebooks = phrasebooks;    int count = phrasebooks.count();    m_model.insertRows(0, count);    for (int i = 0; i < count; ++i) {        QString name = phrasebooks[i].friendlyPhraseBookName();        //QString name = QLatin1String("language %1");        name = name.arg(i);        m_model.setData(m_model.index(i,0), name);        m_model.setData(m_model.index(i,0), Qt::Checked, Qt::CheckStateRole);    }}PhraseBook *BatchTranslationDialog::GetNamedPhraseBook(const QString &name){    for (int i = 0; i < m_phrasebooks.count(); ++i) {        if (m_phrasebooks[i].friendlyPhraseBookName() == name) return &m_phrasebooks[i];    }    return 0;}void BatchTranslationDialog::startTranslation(){    int translatedcount = 0;    QCursor oldCursor = cursor();    setCursor(Qt::BusyCursor);    int messageCount = m_messagemodel->getMessageCount();    QProgressDialog *dlgProgress;    dlgProgress = new QProgressDialog(tr("Searching, please wait..."), tr("&Cancel"), 0, messageCount, this);    dlgProgress->show();    MessageModel::iterator it = m_messagemodel->begin();    int msgidx = 0;    bool doProcess = true;    for ( ;it.current() && doProcess; ++it) {        MessageItem *m  = it.current();        if ( m_ui.ckOnlyUntranslated->isChecked() ) {            if (!m->translation().isEmpty()) continue;        }        // Go through them in the order the user specified in the phrasebookList        for (int b = 0; b < m_model.rowCount() && doProcess; ++b) {            QVariant checkState = m_model.data(m_model.index(b, 0), Qt::CheckStateRole);            if (checkState == Qt::Checked) {                QVariant pbname = m_model.data(m_model.index(b, 0));                PhraseBook *pb = GetNamedPhraseBook(pbname.toString());                for (int p = 0; p < pb->count(); ++p) {                    Phrase ph = pb->at(p);                    if (ph.source() == m->sourceText() && !m->finished()) {                        m->setTranslation(ph.target());                        m->setFinished(m_ui.ckMarkFinished->isChecked());                        ++translatedcount;                    }                }                if (dlgProgress->wasCanceled()) {                    doProcess = false;                    break;                }            }            qApp->processEvents();        }        ++msgidx;        dlgProgress->setValue(msgidx);    }    dlgProgress->setValue(messageCount);    setCursor(oldCursor);    m_messagemodel->updateAll();    emit finished();    QMessageBox::information(this, tr("Linguist batch translator"),         tr("Batch translated %1 entries").arg(translatedcount), QMessageBox::Ok);    //### update stats    //### update translationcount etc.}void BatchTranslationDialog::movePhraseBookUp(){    QModelIndexList indexes = m_ui.phrasebookList->selectionModel()->selectedIndexes();    if (indexes.count() <= 0) return;    QModelIndex sel = indexes[0];    int row = sel.row();    if (row > 0) {        QModelIndex other = m_model.index(row - 1, 0);        QMap<int, QVariant> seldata = m_model.itemData(sel);        m_model.setItemData(sel, m_model.itemData(other));        m_model.setItemData(other, seldata);        m_ui.phrasebookList->selectionModel()->setCurrentIndex(other, QItemSelectionModel::ClearAndSelect);    }}void BatchTranslationDialog::movePhraseBookDown(){    QModelIndexList indexes = m_ui.phrasebookList->selectionModel()->selectedIndexes();    if (indexes.count() <= 0) return;    QModelIndex sel = indexes[0];    int row = sel.row();    if (row < m_model.rowCount() - 1) {        QModelIndex other = m_model.index(row + 1, 0);        QMap<int, QVariant> seldata = m_model.itemData(sel);        m_model.setItemData(sel, m_model.itemData(other));        m_model.setItemData(other, seldata);        m_ui.phrasebookList->selectionModel()->setCurrentIndex(other, QItemSelectionModel::ClearAndSelect);    }}

⌨️ 快捷键说明

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