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

📄 classwizard.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
字号:
/******************************************************************************** Copyright (C) 2004-2006 Trolltech ASA. All rights reserved.**** This file is part of the example classes 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 <QtGui>#include "classwizard.h"ClassWizard::ClassWizard(QWidget *parent)    : SimpleWizard(parent){    setNumPages(3);}QWidget *ClassWizard::createPage(int index){    switch (index) {    case 0:        firstPage = new FirstPage(this);        return firstPage;    case 1:        secondPage = new SecondPage(this);        return secondPage;    case 2:        thirdPage = new ThirdPage(this);        return thirdPage;    }    return 0;}void ClassWizard::accept(){    QByteArray className = firstPage->classNameLineEdit->text().toAscii();    QByteArray baseClass = firstPage->baseClassLineEdit->text().toAscii();    bool qobjectMacro = firstPage->qobjectMacroCheckBox->isChecked();    bool qobjectCtor = firstPage->qobjectCtorRadioButton->isChecked();    bool qwidgetCtor = firstPage->qwidgetCtorRadioButton->isChecked();    bool defaultCtor = firstPage->defaultCtorRadioButton->isChecked();    bool copyCtor = firstPage->copyCtorCheckBox->isChecked();    bool comment = secondPage->commentCheckBox->isChecked();    bool protect = secondPage->protectCheckBox->isChecked();    QByteArray macroName = secondPage->macroNameLineEdit->text().toAscii();    bool includeBase = secondPage->includeBaseCheckBox->isChecked();    QByteArray baseInclude = secondPage->baseIncludeLineEdit->text().toAscii();    QString outputDir = thirdPage->outputDirLineEdit->text();    QString header = thirdPage->headerLineEdit->text();    QString implementation = thirdPage->implementationLineEdit->text();    QByteArray block;    if (comment) {        block += "/*\n";        block += "    " + header.toAscii() + "\n";        block += "*/\n";        block += "\n";    }    if (protect) {        block += "#ifndef " + macroName + "\n";        block += "#define " + macroName + "\n";        block += "\n";    }    if (includeBase) {        block += "#include " + baseInclude + "\n";        block += "\n";    }    block += "class " + className;    if (!baseClass.isEmpty())        block += " : public " + baseClass;    block += "\n";    block += "{\n";    /* qmake ignore Q_OBJECT */    if (qobjectMacro) {        block += "    Q_OBJECT\n";        block += "\n";    }    block += "public:\n";    if (qobjectCtor) {        block += "    " + className + "(QObject *parent);\n";    } else if (qwidgetCtor) {        block += "    " + className + "(QWidget *parent);\n";    } else if (defaultCtor) {        block += "    " + className + "();\n";        if (copyCtor) {            block += "    " + className + "(const " + className + " &other);\n";            block += "\n";            block += "    " + className + " &operator=" + "(const " + className                     + " &other);\n";        }    }    block += "};\n";    if (protect) {        block += "\n";        block += "#endif\n";    }    QFile headerFile(outputDir + "/" + header);    if (!headerFile.open(QFile::WriteOnly | QFile::Text)) {        QMessageBox::warning(this, tr("Simple Wizard"),                             tr("Cannot write file %1:\n%2")                             .arg(headerFile.fileName())                             .arg(headerFile.errorString()));        return;    }    headerFile.write(block);    block.clear();    if (comment) {        block += "/*\n";        block += "    " + implementation.toAscii() + "\n";        block += "*/\n";        block += "\n";    }    block += "#include \"" + header.toAscii() + "\"\n";    block += "\n";    if (qobjectCtor) {        block += className + "::" + className + "(QObject *parent)\n";        block += "    : " + baseClass + "(parent)\n";        block += "{\n";        block += "}\n";    } else if (qwidgetCtor) {        block += className + "::" + className + "(QWidget *parent)\n";        block += "    : " + baseClass + "(parent)\n";        block += "{\n";        block += "}\n";    } else if (defaultCtor) {        block += className + "::" + className + "()\n";        block += "{\n";        block += "    // missing code\n";        block += "}\n";        if (copyCtor) {            block += "\n";            block += className + "::" + className + "(const " + className                     + " &other)\n";            block += "{\n";            block += "    *this = other;\n";            block += "}\n";            block += "\n";            block += className + " &" + className + "::operator=(const "                     + className + " &other)\n";            block += "{\n";            if (!baseClass.isEmpty())                block += "    " + baseClass + "::operator=(other);\n";            block += "    // missing code\n";            block += "    return *this;\n";            block += "}\n";        }    }    QFile implementationFile(outputDir + "/" + implementation);    if (!implementationFile.open(QFile::WriteOnly | QFile::Text)) {        QMessageBox::warning(this, tr("Simple Wizard"),                             tr("Cannot write file %1:\n%2")                             .arg(implementationFile.fileName())                             .arg(implementationFile.errorString()));        return;    }    implementationFile.write(block);    QDialog::accept();}FirstPage::FirstPage(ClassWizard *wizard)    : QWidget(wizard){    topLabel = new QLabel(tr("<center><b>Class information</b></center>"                             "<p>This wizard will generate a skeleton class "                             "definition and member function definitions."));    topLabel->setWordWrap(false);    classNameLabel = new QLabel(tr("Class &name:"));    classNameLineEdit = new QLineEdit;    classNameLabel->setBuddy(classNameLineEdit);    setFocusProxy(classNameLineEdit);    baseClassLabel = new QLabel(tr("&Base class:"));    baseClassLineEdit = new QLineEdit;    baseClassLabel->setBuddy(baseClassLineEdit);    qobjectMacroCheckBox = new QCheckBox(tr("&Generate Q_OBJECT macro"));    groupBox = new QGroupBox(tr("&Constructor"));    qobjectCtorRadioButton = new QRadioButton(tr("&QObject-style constructor"));    qwidgetCtorRadioButton = new QRadioButton(tr("Q&Widget-style constructor"));    defaultCtorRadioButton = new QRadioButton(tr("&Default constructor"));    copyCtorCheckBox = new QCheckBox(tr("&Also generate copy constructor and "                                        "assignment operator"));    defaultCtorRadioButton->setChecked(true);    connect(classNameLineEdit, SIGNAL(textChanged(const QString &)),            this, SLOT(classNameChanged()));    connect(defaultCtorRadioButton, SIGNAL(toggled(bool)),            copyCtorCheckBox, SLOT(setEnabled(bool)));    wizard->setButtonEnabled(false);    QVBoxLayout *groupBoxLayout = new QVBoxLayout;    groupBoxLayout->addWidget(qobjectCtorRadioButton);    groupBoxLayout->addWidget(qwidgetCtorRadioButton);    groupBoxLayout->addWidget(defaultCtorRadioButton);    groupBoxLayout->addWidget(copyCtorCheckBox);    groupBox->setLayout(groupBoxLayout);    QGridLayout *layout = new QGridLayout;    layout->addWidget(topLabel, 0, 0, 1, 2);    layout->setRowMinimumHeight(1, 10);    layout->addWidget(classNameLabel, 2, 0);    layout->addWidget(classNameLineEdit, 2, 1);    layout->addWidget(baseClassLabel, 3, 0);    layout->addWidget(baseClassLineEdit, 3, 1);    layout->addWidget(qobjectMacroCheckBox, 4, 0, 1, 2);    layout->addWidget(groupBox, 5, 0, 1, 2);    layout->setRowStretch(6, 1);    setLayout(layout);}void FirstPage::classNameChanged(){    ClassWizard *wizard = qobject_cast<ClassWizard *>(parent());    wizard->setButtonEnabled(!classNameLineEdit->text().isEmpty());}SecondPage::SecondPage(ClassWizard *wizard)    : QWidget(wizard){    topLabel = new QLabel(tr("<center><b>Code style options</b></center>"));    commentCheckBox = new QCheckBox(tr("&Start generated files with a comment"));    commentCheckBox->setChecked(true);    setFocusProxy(commentCheckBox);    protectCheckBox = new QCheckBox(tr("&Protect header file against multiple "                                       "inclusions"));    protectCheckBox->setChecked(true);    macroNameLabel = new QLabel(tr("&Macro name:"));    macroNameLineEdit = new QLineEdit;    macroNameLabel->setBuddy(macroNameLineEdit);    includeBaseCheckBox = new QCheckBox(tr("&Include base class definition"));    baseIncludeLabel = new QLabel(tr("Base class include:"));    baseIncludeLineEdit = new QLineEdit;    baseIncludeLabel->setBuddy(baseIncludeLineEdit);    QString className = wizard->firstPage->classNameLineEdit->text();    macroNameLineEdit->setText(className.toUpper() + "_H");    QString baseClass = wizard->firstPage->baseClassLineEdit->text();    if (baseClass.isEmpty()) {        includeBaseCheckBox->setEnabled(false);        baseIncludeLabel->setEnabled(false);        baseIncludeLineEdit->setEnabled(false);    } else {        includeBaseCheckBox->setChecked(true);        if (QRegExp("Q[A-Z].*").exactMatch(baseClass)) {            baseIncludeLineEdit->setText("<" + baseClass + ">");        } else {            baseIncludeLineEdit->setText("\"" + baseClass.toLower() + ".h\"");        }    }    connect(protectCheckBox, SIGNAL(toggled(bool)),            macroNameLabel, SLOT(setEnabled(bool)));    connect(protectCheckBox, SIGNAL(toggled(bool)),            macroNameLineEdit, SLOT(setEnabled(bool)));    connect(includeBaseCheckBox, SIGNAL(toggled(bool)),            baseIncludeLabel, SLOT(setEnabled(bool)));    connect(includeBaseCheckBox, SIGNAL(toggled(bool)),            baseIncludeLineEdit, SLOT(setEnabled(bool)));    QGridLayout *layout = new QGridLayout;    layout->setColumnMinimumWidth(0, 20);    layout->addWidget(topLabel, 0, 0, 1, 3);    layout->setRowMinimumHeight(1, 10);    layout->addWidget(commentCheckBox, 2, 0, 1, 3);    layout->addWidget(protectCheckBox, 3, 0, 1, 3);    layout->addWidget(macroNameLabel, 4, 1);    layout->addWidget(macroNameLineEdit, 4, 2);    layout->addWidget(includeBaseCheckBox, 5, 0, 1, 3);    layout->addWidget(baseIncludeLabel, 6, 1);    layout->addWidget(baseIncludeLineEdit, 6, 2);    layout->setRowStretch(7, 1);    setLayout(layout);}ThirdPage::ThirdPage(ClassWizard *wizard)    : QWidget(wizard){    topLabel = new QLabel(tr("<center><b>Output files</b></center>"));    outputDirLabel = new QLabel(tr("&Output directory:"));    outputDirLineEdit = new QLineEdit;    outputDirLabel->setBuddy(outputDirLineEdit);    setFocusProxy(outputDirLineEdit);    headerLabel = new QLabel(tr("&Header file name:"));    headerLineEdit = new QLineEdit;    headerLabel->setBuddy(headerLineEdit);    implementationLabel = new QLabel(tr("&Implementation file name:"));    implementationLineEdit = new QLineEdit;    implementationLabel->setBuddy(implementationLineEdit);    QString className = wizard->firstPage->classNameLineEdit->text();    headerLineEdit->setText(className.toLower() + ".h");    implementationLineEdit->setText(className.toLower() + ".cpp");    outputDirLineEdit->setText(QDir::convertSeparators(QDir::homePath()));    QGridLayout *layout = new QGridLayout;    layout->addWidget(topLabel, 0, 0, 1, 2);    layout->setRowMinimumHeight(1, 10);    layout->addWidget(outputDirLabel, 2, 0);    layout->addWidget(outputDirLineEdit, 2, 1);    layout->addWidget(headerLabel, 3, 0);    layout->addWidget(headerLineEdit, 3, 1);    layout->addWidget(implementationLabel, 4, 0);    layout->addWidget(implementationLineEdit, 4, 1);    layout->setRowStretch(5, 1);    setLayout(layout);}

⌨️ 快捷键说明

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