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

📄 qt3to4.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
字号:
/******************************************************************************** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.**** This file is part of the tools applications 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://trolltech.com/products/qt/licenses/licensing/opensource/**** If you are unsure which license is appropriate for your use, please** review the following information:** http://trolltech.com/products/qt/licenses/licensing/licensingoverview** or contact the sales department at sales@trolltech.com.**** In addition, as a special exception, Trolltech gives you certain** additional rights. These rights are described in the Trolltech GPL** Exception version 1.0, which can be found at** http://www.trolltech.com/products/qt/gplexception/ and in the file** GPL_EXCEPTION.txt in this package.**** In addition, as a special exception, Trolltech, as the sole copyright** holder for Qt Designer, grants users of the Qt/Eclipse Integration** plug-in the right for the Qt/Eclipse Integration to link to** functionality provided by Qt Designer and its related libraries.**** Trolltech reserves all rights not expressly granted herein.**** 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 "qt3to4.h"#include <QApplication>#include <QDir>#include <QFile>#include <QHash>#include <QLibraryInfo>#include <QXmlDefaultHandler>#include <QXmlSimpleReader>class ContentHandler: public QXmlDefaultHandler{public:    typedef QPair<QString, QString> Rule;    typedef QList<Rule> RuleList;public:    ContentHandler() {}    inline RuleList renamedHeaders() const    { return rules(QString::fromLatin1("RenamedHeader")); }    inline RuleList renamedClasses() const    { return rules(QString::fromLatin1("RenamedClass")); }    inline RuleList renamedEnums() const    { return rules(QString::fromLatin1("RenamedEnumvalue")); }    inline RuleList rules(const QString &kind) const    { return m_rules.value(kind); }    virtual bool startDocument()    {        m_rules.clear();        m_state.current.clear();        m_state.kind.clear();        m_state.q3.clear();        m_state.q4.clear();        return true;    }    virtual bool startElement(const QString &, const QString &, const QString &qName, const QXmlAttributes &attrs)    {        if (qName == QLatin1String("item")) {            m_state.kind = attrs.value(QLatin1String("Type"));            m_state.current.clear();            m_state.q3.clear();            m_state.q4.clear();            if (!m_rules.contains(m_state.kind))                m_rules[m_state.kind].clear();            return true;        }        return true; // ### only if it is a valid tag    }    virtual bool endElement(const QString &, const QString &, const QString &qName)    {        if (qName == QLatin1String("Qt3")) {            m_state.q3 = m_state.current.trimmed();        } else if (qName == QLatin1String("Qt4")) {            m_state.q4 = m_state.current.trimmed();        } else if (qName == QLatin1String("item")                   && (m_state.kind == QLatin1String("RenamedHeader")                       || m_state.kind == QLatin1String("RenamedEnumvalue")                       || m_state.kind == QLatin1String("RenamedClass"))) {            Rule r(m_state.q3, m_state.q4);            m_rules[m_state.kind].append(r);        }        m_state.current.clear();        return true;    }    virtual bool characters(const QString &ch)    { m_state.current += ch; return true; }    virtual bool error(const QXmlParseException &e)    { Q_UNUSED(e); Q_ASSERT(0); return true; }    virtual bool fatalError(const QXmlParseException &e)    { Q_UNUSED(e); Q_ASSERT(0); return true; }    virtual bool warning(const QXmlParseException &e)    { Q_UNUSED(e); Q_ASSERT(0); return true; }private:    QHash<QString, RuleList> m_rules;    struct state    {        QString current;        QString kind;        QString q3;        QString q4;    } m_state;};void Porting::readXML(RuleList *renamedHeaders, RuleList *renamedClasses, RuleList *renamedEnums){    QString fileName = QLatin1String("q3porting.xml");    QString filePath;    //check QLibraryInfo::DataPath/filename    filePath = QDir::cleanPath(QLibraryInfo::location(QLibraryInfo::DataPath) + QLatin1String("/") + fileName)  ;    //check QLibraryInfo::PrefixPath/tools/porting/src/filename    if (!QFile::exists(filePath))        filePath = QDir::cleanPath(QLibraryInfo::location(QLibraryInfo::PrefixPath) + QLatin1String("/tools/porting/src/") + fileName);    // for bootstrapping, look in the rules file in a location    // relative to where it would be in the source tree    if (!QFile::exists(filePath))        filePath = QDir::cleanPath(QApplication::instance()->applicationDirPath() + QLatin1String("/../tools/porting/src/") + fileName);    if (!QFile::exists(filePath)) {        fprintf(stderr, "Error: Could not find rules file: %s\n", fileName.toLatin1().constData());        Q_ASSERT(0);    }    ContentHandler handler;    QXmlSimpleReader reader;    reader.setContentHandler(&handler);    reader.setErrorHandler(&handler);    QFile file(filePath);    file.open(QFile::ReadOnly);    QXmlInputSource source(file);    bool ok = reader.parse(&source);    Q_UNUSED(ok);    Q_ASSERT(ok);    if (renamedHeaders)        *renamedHeaders = handler.renamedHeaders();    if (renamedClasses)        *renamedClasses = handler.renamedClasses();    if (renamedEnums)        *renamedEnums = handler.renamedEnums();}Porting::Porting(){    readXML(&m_renamedHeaders, &m_renamedClasses, &m_renamedEnums);}int Porting::findRule(const RuleList &rules, const QString &q3){    for (int i=0; i<rules.count(); ++i)        if (rules.at(i).first == q3)            return i;    return -1;}QString Porting::renameHeader(const QString &headerName) const{    int index = findRule(m_renamedHeaders, headerName);    return index == -1 ? headerName : m_renamedHeaders.at(index).second;}QString Porting::renameClass(const QString &className) const{    if (className == QLatin1String("QSplitter"))  // We don't want a Q3Splitter, ever!        return className;    int index = findRule(m_renamedClasses, className);    return index == -1 ? className : m_renamedClasses.at(index).second;}QString Porting::renameEnumerator(const QString &enumName) const{    int index = findRule(m_renamedEnums, enumName);    return index == -1 ? QString() : m_renamedEnums.at(index).second;}

⌨️ 快捷键说明

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