Qt程序设计——实现以项目管理文件的功能:创建和打开项目
来源:互联网 发布:移动网络转换电信 编辑:程序博客网 时间:2024/06/10 06:49
1.引言
软件中很多是以项目的形式进行管理的,比如时常使用的Visual Studio等。下面使用Qt实现该功能。主要由新建项目和打开已存在项目
新建项目时建立一个.pro文件,pro文件内的内容如下所示:
之所以这样,是为了方便读取项目中的一些文件。
2.新建项目
新建项目时弹出一个对话框,输入项目名和项目要保存的路径,此外,还需输入一个文件夹的目录,因为要将此文件夹拷贝到项目目录路径下。
新建项目的对话框如下:
程序如下:
主要就是获取输入的项目名称以及目录
//newproject.h#ifndef NEWPROJECT_H#define NEWPROJECT_H#include <QDialog>#include <QString>namespace Ui {class NewProject;}class NewProject : public QDialog{ Q_OBJECT public: explicit NewProject(QWidget *parent = 0); ~NewProject(); //获得新建项目名 QString get_new_project_name(){return new_project_name_;} //获得新建项目的目录 QString get_new_project_dir(){return new_project_dir_;} //获得可执行文件所在文件夹路径 QString get_excute_file_dir(){return excute_file_dir_;} private: Ui::NewProject *ui; QString new_project_name_;//新建项目名 QString new_project_dir_;//新建项目文件夹路径 QString excute_file_dir_;//可执行文件所在文件夹路径private slots: void choose_project_dir();//选择项目目录按钮 void choose_excute_dir();//选择可执行文件所在文件夹目录 void ok_new_project();//确定按钮 void cancel_new_project_();//取消按钮};#endif // NEWPROJECT_H//newproject.cpp#include "newproject.h"#include "ui_newproject.h"#include <QFileDialog>#include <QMessageBox>//构造函数NewProject::NewProject(QWidget *parent) : QDialog(parent), ui(new Ui::NewProject){ ui->setupUi(this); //选择新建项目目录按钮信号槽 connect(ui->chooseProjectDir,SIGNAL(clicked()),this,SLOT(choose_project_dir())); //选择可执行文件所在文件夹目录按钮信号槽 connect(ui->chooseExcuteDir,SIGNAL(clicked()),this,SLOT(choose_excute_dir())); //确定按钮信号槽 connect(ui->okNewProject,SIGNAL(clicked()),this,SLOT(ok_new_project())); //取消按钮信号槽 connect(ui->cancelNewProject,SIGNAL(clicked()),this,SLOT(cancel_new_project_())); //连接接受槽 connect(ui->okNewProject,SIGNAL(clicked()),this,SLOT(accept())); //连接拒绝槽 connect(ui->cancelNewProject,SIGNAL(clicked()),this,SLOT(reject()));}//析构函数NewProject::~NewProject(){ delete ui;}/************************************************************/ /*功能:选择新建项目目录 设计:弹出选择文件夹的对话框,选择文件夹*//************************************************************/void NewProject::choose_project_dir(){ QFileDialog *file_dialog=new QFileDialog(this); file_dialog->setOption(QFileDialog::ShowDirsOnly);//设置显示选项 file_dialog->setFileMode(QFileDialog::Directory);//设置文件模式 file_dialog->setViewMode(QFileDialog::List);//设置显示模式 //点击确定按钮 if(file_dialog->exec()==QFileDialog::Accepted) { //获取新建项目路径 new_project_dir_=file_dialog->selectedFiles().at(0); ui->projectDir->setText(new_project_dir_);//设置路径栏 } //点取消则返回 else { return; } delete file_dialog; file_dialog=NULL;}/************************************************************/ /*功能:选择可执行文件所在文件夹路径 设计:弹出选择文件夹的对话框,选择文件夹*//************************************************************/void NewProject::choose_excute_dir(){ QFileDialog *file_dialog=new QFileDialog(this); //file_dialog->setOption(QFileDialog::ShowDirsOnly);//设置显示选项 file_dialog->setFileMode(QFileDialog::Directory);//设置文件模式 file_dialog->setViewMode(QFileDialog::List);//设置显示模式 //点击确定按钮 if(file_dialog->exec()==QFileDialog::Accepted) { //获取exe文件所在文件夹路径 excute_file_dir_=file_dialog->selectedFiles().at(0); ui->excuteDir->setText(excute_file_dir_);//设置exe文件夹路径栏 } //点取消则返回 else { return; } delete file_dialog; file_dialog=NULL;}//确定新建项目void NewProject::ok_new_project(){ //获取项目名 new_project_name_=ui->projectName->text().trimmed(); //判断名字是否为空 if( new_project_name_.isEmpty() || new_project_dir_.isEmpty() ) { QMessageBox::information(this,"提示","表格未填完整,新建项目失败",QMessageBox::Yes); }}//取消新建项目void NewProject::cancel_new_project_(){ QMessageBox::information(this,"提示","已取消新建项目",QMessageBox::Yes);}
在主界面的实现程序中,调用此新建项目对话框,获取项目名称以及路径
主界面如下:
在MainWindow类中完成新建项目和打开项目的功能,需要注意的一点,主界面中的三个控件可以伸缩。
//mainwindow.h#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QFile>#include <QSplitter>#include <QDir>#include "twodimcurve.h"#include "nehewidget.h"namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{ Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void new_project();//新建项目菜单 void open_project();//打开项目菜单private: Ui::MainWindow *ui; QSplitter *hsplitter;//水平分割器 QSplitter *vsplitter;//垂直分割器 //文件名 QVector<QString> project_name_;//项目名称 QVector<QString> pro_path_;//项目文件路径(pro文件) QVector<QString> project_dir_;//项目目录 QVector<QString> excute_dir_;//可执行文件目录(在项目中的目录)};#endif // MAINWINDOW_H//mainwindow.cpp#include "mainwindow.h"#include "ui_mainwindow.h"#include <QFile>#include <QTimer>#include <QGridLayout>#include <QFileDialog>#include <QProcess>#include <QTextStream>#include "newproject.h"#include "parameterset.h"#include "file_readwrite.h"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); //设置水平和垂直分割器,界面布局 hsplitter=new QSplitter;//水平 vsplitter=new QSplitter;//垂直 vsplitter->setOrientation(Qt::Vertical); setCentralWidget(hsplitter); //注意部件顺序 hsplitter->addWidget(ui->treeWidget); hsplitter->addWidget(vsplitter); vsplitter->addWidget(ui->mdiArea); vsplitter->addWidget(ui->tabWidget); //新建项目信号槽 connect(ui->newProject,SIGNAL(triggered()),this,SLOT(new_project())); //打开项目信号槽 connect(ui->openProject,SIGNAL(triggered()),this,SLOT(open_project()));}//构造函数MainWindow::~MainWindow(){ delete ui;}/************************************************************/ /*功能:新建项目 *//************************************************************/void MainWindow::new_project(){ NewProject project; //所有栏都填完,且按下确定按钮 if(project.exec()==QDialog::Accepted) { //获取新建项目名 QString project_name__=project.get_new_project_name(); //获取项目路径名 QString project_dir__=project.get_new_project_dir(); //获取可执行文件所在文件夹路径名 QString excute_dir__=project.get_excute_file_dir(); //新建项目失败 if(project_name__.isEmpty() || project_dir__.isEmpty()) return; //新建项目成功 else { project_name_.append(project_name__);//添加项目名称 //新建项目文件夹 QDir dir(project_dir__);//项目文件夹所在目录 dir.mkdir(project_name__);//创建以项目名为名字的目录 QString _project_dir_=dir.absoluteFilePath(project_name__);//获取项目文件夹的绝对路径 project_dir_.append(_project_dir_);//添加项目文件夹路径 QDir project_dir(_project_dir_); //新建可执行文件文件夹 QString _excute_dir_;//可执行文件在项目目录中的目录 if(!excute_dir__.isEmpty()) { project_dir.mkdir("ExcuteFile"); _excute_dir_=project_dir.absoluteFilePath("ExcuteFile");//获取绝对路径 excute_dir_.append(_excute_dir_);//添加可执行文件的文件夹路径 //复制可执行文件内容 QDir excute_dir_from_(excute_dir__);//可执行文件文件夹原目录 QDir excute_dir_to_(_excute_dir_);//可执行文件文件夹在项目中的目录 if(!qCopyDirectory(excute_dir_from_,excute_dir_to_,true)) { QMessageBox::information(this,"提示","可执行文件复制失败!"); } } else { QMessageBox::information(this,"提示","项目创建成功,但没有选择可执行文件,\n建议将可执行文件的内容复制\n到ExcuteFile文件夹下"); } //新建项目文件pro QFile pro_file( project_dir.filePath(project_name__+".pro") ); pro_file.open(QFile::WriteOnly|QIODevice::Text); pro_path_.append(pro_file.fileName());//添加pro文件 QTextStream pro_stream(&pro_file); pro_stream<<"Project was created successfully!\n"; pro_stream<<"PROJECT NAME = "<<project_name__<<"\n";//添加项目名 pro_stream<<"PROJECT DIR = "<<_project_dir_<<"\n";//添加项目路径 pro_stream<<"PROJECT FILE NAME = "<<pro_file.fileName()<<"\n";//添加pro文件名的路径 pro_stream<<"EXCUTE FILE = "<<_excute_dir_;//添加可执行文件的路径 //创建树形条 QTreeWidgetItem *item=new QTreeWidgetItem(ui->treeWidget,QStringList(project_name__));//添加节点 //添加子节点 QTreeWidgetItem *item1=new QTreeWidgetItem(item,QStringList(QString("执行参数"))); item->addChild(item1); QTreeWidgetItem *item2=new QTreeWidgetItem(item,QStringList(QString("可执行文件"))); item->addChild(item2); QTreeWidgetItem *item3=new QTreeWidgetItem(item,QStringList(QString("后处理"))); item->addChild(item3); ui->treeWidget->expandAll();//展开所有节点 } }}
3.打开项目
//打开项目槽函数void MainWindow::open_project(){ QString file_path_=QFileDialog::getOpenFileName(this,".打开项目"); QFile file(file_path_); file.open(QIODevice::ReadOnly|QIODevice::Text); QByteArray str_line_; QString temp; file.readLine(); //项目名 str_line_=file.readLine(); temp=str_line_.mid(QString("PROJECT NAME = ").length(),str_line_.length()-QString("PROJECT NAME = ").length()-1); project_name_.append(temp); //创建树形条 QTreeWidgetItem *item=new QTreeWidgetItem(ui->treeWidget,QStringList(temp));//添加节点 //项目文件夹 str_line_=file.readLine(); temp=str_line_.mid(QString("PROJECT DIR = ").length(),str_line_.length()-QString("PROJECT DIR = ").length()-1); project_dir_.append(temp); //项目文件路径(pro) str_line_=file.readLine(); temp=str_line_.mid(QString("PROJECT FILE NAME = ").length(),str_line_.length()-QString("PROJECT FILE NAME = ").length()-1); pro_path_.append(temp); //可执行文件所在文件夹 str_line_=file.readLine(); temp=str_line_.mid(QString("EXCUTE FILE = ").length(),str_line_.length()-QString("EXCUTE FILE = ").length()); excute_dir_.append(temp); //添加子节点 QTreeWidgetItem *item1=new QTreeWidgetItem(item,QStringList(QString("执行参数"))); item->addChild(item1); QTreeWidgetItem *item2=new QTreeWidgetItem(item,QStringList(QString("可执行文件"))); item->addChild(item2); QTreeWidgetItem *item3=new QTreeWidgetItem(item,QStringList(QString("后处理"))); item->addChild(item3); ui->treeWidget->expandAll();//展开所有节点}
4.总结
统观全文,基本上都是对字符串、目录、文件夹和文件的操作,用到的Qt类主要是QString和QDir。
- Qt程序设计——实现以项目管理文件的功能:创建和打开项目
- 2. Qt Creator 项目管理-创建项目
- Qt程序设计——文件/文件夹的创建
- 关于vs2012不能创建项目和打开项目的解决办法
- 项目实战篇-餐馆管理系统—MFC,PHP,MySql:2.登陆功能的实现
- 以使用vs2005打开vs2008的项目
- Maven创建项目和管理项目
- Unity——Export/Import Package功能和项目管理的研究
- [转]Unity——Export/Import Package功能和项目管理的研究
- Unity——Export/Import Package功能和项目管理的研究
- qt5.9 子项目创建及qt项目管理
- qt5.9 子项目创建及qt项目管理
- OA项目之部门管理的功能实现
- QT中cmakelists项目文件添加类似pro文件的“Qt+=webkit”功能
- Qt for Android 项目中,创建的工程路径中不可以有空格
- 创建自己的游戏——项目管理
- 创建自己的游戏——项目管理
- 【项目管理和构建】—— eclipse配置maven + 创建maven项目(三)
- 《一个操作系统的实现》(三):4.中断和异常&5.保护模式下的I/O
- Android 开发环境配置图文教程(jdk+eclipse+android sdk)
- 什么是同步??同步模式有哪些
- mongodb中的一些符号
- cygwin安装ruby1.9.3
- Qt程序设计——实现以项目管理文件的功能:创建和打开项目
- 比较C++中的4种类型转换方式
- HDU 4151The Special Number(暴力+二分)
- Linux Kernel Development——定时器和时间管理
- HDU 1010——Tempter of the Bone
- Ant(1)
- Win7系统下解决魔兽争霸全屏问题
- 转置
- C++标准库 Numeric limits climits cfloat cstdint