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

📄 newprojectimpl.cpp

📁 用Qt4编写的linux IDE开发环境
💻 CPP
字号:
/** This file is part of QDevelop, an open-source cross-platform IDE* Copyright (C) 2006  Jean-Luc Biord** This program is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License as published by* the Free Software Foundation; either version 2 of the License, or* (at your option) any later version.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the* GNU General Public License for more details.** You should have received a copy of the GNU General Public License* along with this program; if not, write to the Free Software* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA** Contact e-mail: Jean-Luc Biord <jl.biord@free.fr>* Program URL   : http://qdevelop.org**/#include "newprojectimpl.h"#include "projectmanager.h"#include "mainimpl.h"#include <QLineEdit>#include <QFileDialog>#include <QMessageBox>//NewProjectImpl::NewProjectImpl(QWidget * parent, QString s)        : QDialog(0), m_projectLocation(s){    setupUi(this);    m_mainImpl = (MainImpl *)parent;    connect(locationButton, SIGNAL(clicked()), this, SLOT(slotChooseDirectory()) );    connect(projectName, SIGNAL(textChanged(QString)), this, SLOT(slotLabel()) );    connect(location, SIGNAL(textChanged(QString)), this, SLOT(slotLabel()) );    location->setText( s );}//void NewProjectImpl::slotChooseDirectory(){    QString s = QFileDialog::getExistingDirectory(                    this,                    tr("Choose the project directory"),                    m_projectLocation,                    QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks );    if ( s.isEmpty() )    {        // Cancel clicked        return;    }    location->setText( s );}//void NewProjectImpl::slotLabel(){    //label->setText( label->text().section(":", 0, 0) + ": "	+ location->text() + "/" + projectName->text().toLower().remove(".pro") );    if ( projectName->text().isEmpty() || location->text().isEmpty() )    {        okButton->setEnabled( false );        label->setText( label->text().section(":", 0, 0) + ": "	);    }    else    {        okButton->setEnabled( true );        label->setText( label->text().section(":", 0, 0) + ": "	+ location->text() + "/" + QFileInfo(projectName->text()).baseName() );    }}void NewProjectImpl::on_dialog_clicked(bool checked){    if (!checked)        return;    uiFilename->setText( "dialog" );    subclassFilename->setText( "dialogimpl" );    uiObjectName->setText( "Dialog" );    subclassObjectName->setText( "DialogImpl" );}void NewProjectImpl::on_mainwindow_clicked(bool checked){    if (!checked)        return;    uiFilename->setText( "mainwindow" );    subclassFilename->setText( "mainwindowimpl" );    uiObjectName->setText( "MainWindow" );    subclassObjectName->setText( "MainWindowImpl" );}void NewProjectImpl::on_okButton_clicked(){    bool isSubProject = false;    if ( !parentProjectName->text().isEmpty() )        isSubProject = true;    if ( !isSubProject && !m_mainImpl->slotCloseProject() )    {        reject();    }    m_filename = projectName->text();    if ( !m_filename.toLower().contains( ".pro" ) )        m_filename += ".pro";    QString projectDirectory = location->text();    projectDirectory += "/" + m_filename.left( m_filename.lastIndexOf(".") );    QString l_srcDirectory = projectDirectory+"/"+srcDirectory->text();    QString l_uiDirectory = projectDirectory+"/"+uiDirectory->text();    QString l_buildDirectory = buildDirectory->text();    QString l_binDirectory = binDirectory->text();    QString l_uiFilename = uiFilename->text();    QString l_uiObjectName = uiObjectName->text();    QString l_subclassFilename = subclassFilename->text();    QString l_subclassObjectName = subclassObjectName->text();    m_absoluteProjectName = projectDirectory + "/" + m_filename ;    QDir dir;    if ( !dir.mkdir(projectDirectory) )    {        QMessageBox::warning(0,                             "QDevelop", tr("The directory \"%1\" cannot be created").arg(projectDirectory),                             tr("Cancel") );        return;    }    QFile projectFile ( m_absoluteProjectName );    if ( !projectFile.open(QIODevice::WriteOnly | QIODevice::Text) )    {        QMessageBox::warning(0,                             "QDevelop", tr("The project cannot be created"),                             tr("Cancel") );        return;    }    else    {        QByteArray projectFileContent;        if ( !empty->isChecked() )        {            projectFileContent += "TEMPLATE = app\n";            projectFileContent += "QT = gui ";            projectFileContent += "core\n";            projectFileContent += "CONFIG += qt ";            QString version = "debug";            if ( release->isChecked() )                projectFileContent += "release ";            else                projectFileContent += "debug ";            projectFileContent += "warn_on ";            projectFileContent += "console\n";        }        if ( dialog->isChecked() || mainwindow->isChecked() )        {            if ( !l_srcDirectory.isEmpty() )            {                QDir().mkdir( l_srcDirectory );            }            if ( !l_uiDirectory.isEmpty() )            {                QDir().mkdir( l_uiDirectory );            }            if ( !l_binDirectory.isEmpty() )            {                projectFileContent += "DESTDIR = "+l_binDirectory+"\n";            }            if ( !l_buildDirectory.isEmpty() )            {                projectFileContent += "OBJECTS_DIR = "+l_buildDirectory+"\n";                projectFileContent += "MOC_DIR = "+l_buildDirectory+"\n";                projectFileContent += "UI_DIR = "+l_buildDirectory+"\n";            }            if ( dialog->isChecked() )            {                QFile file(":/templates/templates/dialog.ui");                file.open(QIODevice::ReadOnly);                QByteArray data = file.readAll();                file.close();                data.replace("<class>Dialog</class>", "<class>"+l_uiObjectName.toAscii()+"</class>");                data.replace("name=\"Dialog\"", "name=\""+l_uiObjectName.toAscii()+"\"");                QFile uiFile(l_uiDirectory + "/" + l_uiFilename.section(".ui", 0, 0) + ".ui");                uiFile.open(QIODevice::WriteOnly);                uiFile.write( data );                uiFile.close();                projectFileContent+= "FORMS = "+QDir(projectDirectory).relativeFilePath(l_uiDirectory + "/" + l_uiFilename.section(".ui", 0, 0) + ".ui") + "\n";            }            else if ( mainwindow->isChecked() )            {                QFile file(":/templates/templates/mainwindow.ui");                file.open(QIODevice::ReadOnly);                QByteArray data = file.readAll();                file.close();                data.replace("<class>MainWindow</class>", "<class>"+l_uiObjectName.toAscii()+"</class>");                data.replace("name=\"MainWindow\"", "name=\""+l_uiObjectName.toAscii()+"\"");                QFile uiFile(l_uiDirectory + "/" + l_uiFilename.section(".ui", 0, 0) + ".ui");                uiFile.open(QIODevice::WriteOnly);                uiFile.write( data );                uiFile.close();                projectFileContent+= "FORMS = "+QDir(projectDirectory).relativeFilePath(l_uiDirectory + "/" + l_uiFilename.section(".ui", 0, 0) + ".ui") + "\n";            }            // Create subclassing header            QFile file(":/templates/templates/impl.h.template");            file.open(QIODevice::ReadOnly);            QByteArray data = file.readAll();            file.close();            data.replace("$IMPL_H", QString( l_subclassFilename.section(".h", 0, 0).toUpper()+"_H" ).toAscii());            data.replace("$UIHEADERNAME", QString( "\"ui_"+l_uiFilename.section(".ui", 0, 0)+".h\"").toAscii());            data.replace("$CLASSNAME", QString( l_subclassObjectName ).toAscii());            if ( dialog->isChecked() )                data.replace("$PARENTNAME", QString( "QDialog" ).toAscii());            else                data.replace("$PARENTNAME", QString( "QMainWindow" ).toAscii());            data.replace("$OBJECTNAME", QString( l_uiObjectName ).toAscii());            QFile headerFile(l_srcDirectory + "/" + l_subclassFilename + ".h");            headerFile.open(QIODevice::WriteOnly);            headerFile.write( data );            headerFile.close();            projectFileContent += "HEADERS = "+ QDir(projectDirectory).relativeFilePath(l_srcDirectory + "/" + l_subclassFilename + ".h") + "\n";            // Create subclassing sources            QFile file2(":/templates/templates/impl.cpp.template");            file2.open(QIODevice::ReadOnly);            data = file2.readAll();            file2.close();            QFile sourceFile(l_srcDirectory + "/" + l_subclassFilename + ".cpp");            data.replace("$HEADERNAME", QString( "\""+l_subclassFilename+".h\"" ).toAscii());            data.replace("$CLASSNAME", QString( l_subclassObjectName ).toAscii());            if ( dialog->isChecked() )                data.replace("$PARENTNAME", QString( "QDialog" ).toAscii());            else                data.replace("$PARENTNAME", QString( "QMainWindow" ).toAscii());            sourceFile.open(QIODevice::WriteOnly);            sourceFile.write( data );            sourceFile.close();            projectFileContent += "SOURCES = "+ QDir(projectDirectory).relativeFilePath(l_srcDirectory + "/" + l_subclassFilename + ".cpp")+" ";            // Create main.cpp            QFile file3(":/templates/templates/main.cpp.template");            file3.open(QIODevice::ReadOnly);            data = file3.readAll();            file3.close();            QFile mainFile(l_srcDirectory + "/" + "main.cpp");            data.replace("$HEADERNAME", QString( "\""+l_subclassFilename+".h\"" ).toAscii());            data.replace("$CLASSNAME", QString( l_subclassObjectName ).toAscii());            mainFile.open(QIODevice::WriteOnly);            mainFile.write( data );            mainFile.close();            projectFileContent += QDir(projectDirectory).relativeFilePath(l_srcDirectory + "/" + "main.cpp") + "\n";        }        //        projectFile.write( projectFileContent );        projectFile.close();        accept();    }}

⌨️ 快捷键说明

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