qt可视化读取_生成_编辑_联动_保存目录树

在这里插入图片描述

1、基于xml文件生成目录树;
2、目录树左右联动;
3、右键增删改节点;
4、根据目录树在指定根目录下递归生成选中目录,进入生成指定目录;
5、目录树勾选、全选、全不选;
6、保存目录编辑结果为xml文件。

DirManageWidget.h

#ifndef DIRMANAGEWIDGET_H
#define DIRMANAGEWIDGET_H

#include <QDomDocument>
#include <QTreeWidgetItem>
#include <QWidget>
#include "SQLiteDbHelper.h"
#include "TaskModel.h"
namespace Ui {
class DirManageWidget;
}

class DirManageWidget : public QWidget
{
    Q_OBJECT

public:
    explicit DirManageWidget(QWidget *parent = 0);
    ~DirManageWidget();

private:
    Ui::DirManageWidget *ui;
    QDomDocument xmlDoc;
    QTreeWidgetItem *leftLinkRightItem;
    QTreeWidget* currentTree=NULL;
    QList<QString> lstDir;

	//右键
	void setRightClick();

    void initialDirTree();
    //读XML文件
    void ReadMenuXml(QString filePath);
    //写XML文件
    void WriteMenuXml(QString filePath);
    //删除目录
	bool deleteDir(const QString &dirPath);


    //递归法获取树节点
    void getItem(QTreeWidgetItem *item, QDomElement parentEle, QDomDocument doc);
    //递归法获取树节点
    void getItem(QTreeWidgetItem *item,QString &outDir);
    //递归法获取xml节点创建树
    void getNode(QDomElement root, QTreeWidgetItem * item);
    //递归改变子节点转态为全部不选
    void setChildItemUnchecked(QTreeWidgetItem* item);
    void setChildItemChecked(QTreeWidgetItem* item);
    //删除所有勾选项目
    void deleteCheckedItem(QTreeWidgetItem *item, int &deleteCount);

    void hideChildrenOfTop(QTreeWidget* treeWidget);
    void updateParentItem(QTreeWidgetItem* item);
	
public slots:
	void HandleNewSameClassDirClicked();
    void HandleNewSubDirClicked();
	void setItemEditable(QTreeWidgetItem * item, int column);
	void updateRightTree(QTreeWidgetItem* item,int column);
    void updateLeftTree();//将右侧树更新到左侧
    void setItemCheckState(QTreeWidgetItem* item, int column);
    void setCurrentTree(QTreeWidgetItem* item,int column);
    void upDir();
    void downDir();
    void delDir();
    void modifyDir();
    void saveDir();
    void generateDir();
    void enterRootDir();
	void enterDir();
    void setDir();
    void recover();
	void checkAllItem();
	void uncheckAllItem();
};

#endif // DIRMANAGEWIDGET_H

DirManageWidget.cpp

#include "DirManageWidget.h"
#include "ui_dirmanagewidget.h"
#include <QStyleFactory>
#include <QDir>
#include <QDomDocument>
#include <QFile>
#include <QFileDialog>
#include <QFileInfoList>
#include <QTextStream>
#include <QTextStream>
#include <QMessageBox>
#include <QDebug>
#include <QDesktopServices>
#include <QMenu>
DirManageWidget::DirManageWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::DirManageWidget)
{
    ui->setupUi(this);
    
	if (SQLiteDbHelper::ModelTask.Path.isEmpty()|| QDir(SQLiteDbHelper::ModelTask.Path).exists()==false)
	{
		ui->lineEdit_RootDir->setText(QString::fromLocal8Bit("请点击选择设置数据存放根目录"));
		/*SQLiteDbHelper::ModelTask.Path = QCoreApplication::applicationDirPath()+"/"+SQLiteDbHelper::ModelTask.RemittanceDate+"_"+SQLiteDbHelper::ModelTask.TaskID + "_" +SQLiteDbHelper::ModelTask.undertake;
		SQLiteDbHelper::GetInstance()->UpdateTHistory(SQLiteDbHelper::ModelTask, SQLiteDbHelper::ModelTask);*/
	}
	else
	{
		ui->lineEdit_RootDir->setText(SQLiteDbHelper::ModelTask.Path);//汇交数据存储目录
	}
	
	initialDirTree();
	setRightClick();
	
}

DirManageWidget::~DirManageWidget()
{
    delete ui;
}

void DirManageWidget::setRightClick()
{
	//设置左树右键功能
	ui->treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
	connect(ui->treeWidget, &QTreeWidget::customContextMenuRequested, [=](QPoint pos) {

		//设置菜单选项
		QMenu *menu = new QMenu(ui->treeWidget);
		menu->setStyleSheet((
			"QMenu::item {							   "
			"    font-size:10pt;					   "
			"    color: rgb(0,0,0);					   "
			"    background-color:rgb(253,253,254);	   "
			"    padding: 0px 10px 0px 10px;		   "
			"    margin: 1px 1px;					   "
			"}										   "
			));

		//获得鼠标点击的x,y坐标点
		int x = pos.x();
		int y = pos.y();
		QTreeWidgetItem *currentItem = ui->treeWidget->itemAt(QPoint(x, y));
		currentTree = currentItem->treeWidget();
		if (currentTree == ui->treeWidget)
		{
			updateRightTree(currentItem, 0);
			setCurrentTree(currentItem, 0);
		}

		QAction *pNewSameClassDir = new QAction(QString::fromLocal8Bit("新建同级目录"), ui->treeWidget);
		QAction *pNewSubClassDir = new QAction(QString::fromLocal8Bit("新建下级目录"), ui->treeWidget);
		QAction *pDelDir = new QAction(QString::fromLocal8Bit("删除"), ui->treeWidget);
		QAction *pRenameDir = new QAction(QString::fromLocal8Bit("修改"), ui->treeWidget);
		QAction *pEnterDir = new QAction(QString::fromLocal8Bit("打开当前目录"), ui->treeWidget);
		connect(pNewSameClassDir, SIGNAL(triggered()), this, SLOT(HandleNewSameClassDirClicked()));
		connect(pNewSubClassDir, SIGNAL(triggered()), this, SLOT(HandleNewSubDirClicked()));
		connect(pDelDir, SIGNAL(triggered()), this, SLOT(delDir()));
		connect(pRenameDir, SIGNAL(triggered()), this, SLOT(modifyDir()));
		connect(pEnterDir, SIGNAL(triggered()), this, SLOT(enterDir()));
		menu->addAction(pNewSameClassDir);
		menu->addAction(pNewSubClassDir);
		menu->addAction(pDelDir);
		menu->addAction(pRenameDir);
		menu->addAction(pEnterDir);
		menu->move(cursor().pos());
		menu->show();

		
	});

	//设置左树右键功能
	ui->treeWidget_2->setContextMenuPolicy(Qt::CustomContextMenu);
	connect(ui->treeWidget_2, &QTreeWidget::customContextMenuRequested, [=](QPoint pos) {

		//设置菜单选项
		QMenu *menu = new QMenu(ui->treeWidget_2);
		menu->setStyleSheet((
			"QMenu::item {							   "
			"    font-size:10pt;					   "
			"    color: rgb(0,0,0);					   "
			"    background-color:rgb(253,253,254);	   "
			"    padding: 0px 10px 0px 10px;		   "
			"    margin: 1px 1px;					   "
			"}										   "
			));
		QAction *pNewSameClassDir = new QAction(QString::fromLocal8Bit("新建同级目录"), ui->treeWidget_2);
		QAction *pNewSubClassDir = new QAction(QString::fromLocal8Bit("新建下级目录"), ui->treeWidget_2);
		QAction *pDelDir = new QAction(QString::fromLocal8Bit("删除"), ui->treeWidget_2);
		QAction *pRenameDir = new QAction(QString::fromLocal8Bit("修改"), ui->treeWidget_2);
		QAction *pEnterDir = new QAction(QString::fromLocal8Bit("打开当前目录"), ui->treeWidget_2);
		connect(pNewSameClassDir, SIGNAL(triggered()), this, SLOT(HandleNewSameClassDirClicked()));
		connect(pNewSubClassDir, SIGNAL(triggered()), this, SLOT(HandleNewSubDirClicked()));
		connect(pDelDir, SIGNAL(triggered()), this, SLOT(delDir()));
		connect(pRenameDir, SIGNAL(triggered()), this, SLOT(modifyDir()));
		connect(pEnterDir, SIGNAL(triggered()), this, SLOT(enterDir()));
		menu->addAction(pNewSameClassDir);
		menu->addAction(pNewSubClassDir);
		menu->addAction(pDelDir);
		menu->addAction(pRenameDir);
		menu->addAction(pEnterDir);
		menu->move(cursor().pos());
		menu->show();
		//获得鼠标点击的x,y坐标点
		int x = pos.x();
		int y = pos.y();
		QTreeWidgetItem *currentItem = ui->treeWidget_2->itemAt(QPoint(x, y));
		currentTree = currentItem->treeWidget();
		if (currentTree == ui->treeWidget_2)
		{
			setCurrentTree(currentItem, 0);
		}

	});
}

void DirManageWidget::initialDirTree()
{
    ui->treeWidget->setHeaderHidden(true);
    ui->treeWidget_2->setHeaderHidden(true);
	ui->widget->hide();
	//ui->btn_newSubDir->hide();
	//ui->btn_delDir->hide();
	//ui->btn_renameDir->hide();
	//ui->btn_downDir->hide();
	//ui->btn_upDir->hide();
	//ui->btn_saveToXml->hide();
	//ui->btn_Recover->hide();
    //QString rootDir;
    //if (SQLiteDbHelper::ModelTask.Path.isEmpty())
    //    rootDir = SQLiteDbHelper::ModelTask.RootDir;
    //else
    //    rootDir = SQLiteDbHelper::ModelTask.Path;
	//xml存储路径
	QString	dirConfig=QCoreApplication::applicationDirPath() + "/DirManageXml/"+ SQLiteDbHelper::ModelTask.RemittanceDate+"_" + SQLiteDbHelper::ModelTask.TaskID + "_" + SQLiteDbHelper::ModelTask.undertake;
	if (QDir(dirConfig).exists() == false)//如果文件配置文件不存在或者之前没有制定,设置为初始配置文件
	{
		dirConfig= QCoreApplication::applicationDirPath() + "/DirManageXml/dirConfig.xml";
	}
    ReadMenuXml(dirConfig);
    ui->treeWidget->setMouseTracking(true);
    connect(ui->treeWidget,SIGNAL(itemClicked(QTreeWidgetItem*,int)),this,SLOT(updateRightTree(QTreeWidgetItem*, int)));
    connect(ui->treeWidget,SIGNAL(itemClicked(QTreeWidgetItem*,int)),this,SLOT(setCurrentTree(QTreeWidgetItem*, int)));
    connect(ui->treeWidget_2,SIGNAL(itemClicked(QTreeWidgetItem*,int)),this,SLOT(setCurrentTree(QTreeWidgetItem*, int)));
	connect(ui->treeWidget, SIGNAL(itemChanged(QTreeWidgetItem*, int)), this, SLOT(setItemCheckState(QTreeWidgetItem*, int)));//左侧勾选状态改变
    connect(ui->treeWidget_2,SIGNAL(itemChanged(QTreeWidgetItem*,int)),this,SLOT(setItemCheckState(QTreeWidgetItem*,int)));//右侧勾选状态改变

    //    connect(ui->btn_newSameClassDir, &QPushButton::clicked, this, &DirManageWidget::HandleNewSameClassDirClicked);

	connect(ui->treeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem* item, int column)), this, SLOT(setItemEditable(QTreeWidgetItem* item, int column)));
	connect(ui->treeWidget_2, SIGNAL(itemDoubleClicked(QTreeWidgetItem* item, int column)), this, SLOT(setItemEditable(QTreeWidgetItem* item, int column)));//双击可编辑
    
	connect(ui->btn_newSubDir, &QPushButton::clicked, this, &DirManageWidget::HandleNewSubDirClicked);
    connect(ui->btn_upDir,&QPushButton::clicked, this, &DirManageWidget::upDir);
    connect(ui->btn_downDir,&QPushButton::clicked, this, &DirManageWidget::downDir);
    connect(ui->btn_delDir,&QPushButton::clicked, this, &DirManageWidget::delDir);
    connect(ui->btn_renameDir,&QPushButton::clicked, this, &DirManageWidget::modifyDir);
	connect(ui->btn_saveToXml, &QPushButton::clicked, this, &DirManageWidget::saveDir);//保存
    connect(ui->btn_generateDir,&QPushButton::clicked, this, &DirManageWidget::saveDir);
    connect(ui->btn_generateDir,&QPushButton::clicked, this, &DirManageWidget::generateDir);
    connect(ui->btn_enterDir,&QPushButton::clicked, this, &DirManageWidget::enterRootDir);
    connect(ui->btn_setDir,&QPushButton::clicked, this, &DirManageWidget::setDir);
	connect(ui->btn_Recover, &QPushButton::clicked, this, &DirManageWidget::recover);
	connect(ui->btn_checkAll, &QPushButton::clicked, this, &DirManageWidget::checkAllItem);
	connect(ui->btn_uncheckAll, &QPushButton::clicked, this, &DirManageWidget::uncheckAllItem);
	
}

void DirManageWidget::ReadMenuXml(QString filePath)
{
    QFile file(filePath);
    if (!file.exists() || !file.open(QIODevice::ReadOnly))
    {
//        qDebug()<<"dirConfig.xml文件打开失败";
        return;
    }

    if (!xmlDoc.setContent(&file))
    {
//        qDebug()<<"dirConfig.xml文件dom读取失败";
        file.close();
        return;
    }
    file.close();


    QDomElement root = xmlDoc.documentElement();
//    qDebug()<<"开始读取dirConfig.xml文件";
    getNode(root, NULL);
}

void DirManageWidget::WriteMenuXml(QString filePath)
{
    QFile file(filePath);
    if (!file.open(QFile::WriteOnly | QFile::Truncate))
    {
        QMessageBox::warning(this, QString::fromLocal8Bit("警告信息"),
                             QString::fromLocal8Bit("配置文件保存失败!\n%1").arg(file.errorString()), QMessageBox::Ok);
        return;
    }
    QDomDocument doc;
    //写入xml头部
    QDomProcessingInstruction instruction = doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");
    doc.appendChild(instruction);
    //添加根节点
    QDomElement root = doc.createElement("Directorys");
    doc.appendChild(root);
    //添加节点
    int count = ui->treeWidget->topLevelItemCount();
    for (int i = 0; i < count; i++)
    {
        QTreeWidgetItem * item = ui->treeWidget->topLevelItem(i);
        QString itemName = item->text(0);
        QDomElement element = doc.createElement("SubDir");
        element.setAttribute("dirName", itemName);
        element.setAttribute("checked", item->checkState(0));
        element.setAttribute("parentNode", "root");
		element.setAttribute("original", item->text(1));
        root.appendChild(element);
        getItem(item, element, doc);
        //缺少add
    }
    QTextStream outStream(&file);
    outStream.setCodec("UTF-8");
    doc.save(outStream, 4);
    file.close();

}

bool DirManageWidget::deleteDir(const QString &dirPath)
{
    if (dirPath.isEmpty())
        return false;

    QDir dir(dirPath);
    if (!dir.exists())
        return true;
    dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);
    QFileInfoList fileList = dir.entryInfoList();
    foreach(QFileInfo fi, fileList)
    {
        if (fi.isFile())
        {
            fi.dir().remove(fi.fileName());
        }
        else
        {
            deleteDir(fi.absoluteFilePath());
        }
    }

    return dir.rmpath(dir.absolutePath());
}



void DirManageWidget::getItem(QTreeWidgetItem *item, QDomElement parentEle, QDomDocument doc)
{
    if (item->childCount() && item->checkState(0) != Qt::Unchecked)
    {
        for (int i = 0; i < item->childCount(); i++)
        {
            QTreeWidgetItem* subItem = item->child(i);
            QString itemName = subItem->text(0);
            QDomElement element = doc.createElement("Item");
            element.setAttribute("dirName", itemName);
            element.setAttribute("checked", subItem->checkState(0));
            element.setAttribute("indexTop", item->indexOfChild(subItem));
			element.setAttribute("original", item->text(1));
            parentEle.appendChild(element);
            getItem(subItem, element, doc);
        }
    }
}

void DirManageWidget::getItem(QTreeWidgetItem *item, QString &outDir)
{
    if (item->childCount() > 0)
    {
        int count = item->childCount();
        for (int i = 0; i < count; i++)
        {
            QTreeWidgetItem* subItem = item->child(i);
            if (subItem->checkState(0) == false)continue;
            QString subOutDir = outDir + "/" + subItem->text(0);
            getItem(subItem, subOutDir);
            lstDir.push_back(subOutDir);
        }
    }
}

void DirManageWidget::getNode(QDomElement root, QTreeWidgetItem *item)
{
    QDomNode node = root.firstChild();
    while (!node.isNull())
    {
        QDomElement elment = node.toElement();
        if (elment.isElement())
        {
            QString tagName = elment.tagName();
            QString dirName = elment.attribute("dirName");
            QString checked = elment.attribute("checked");
			QString original = elment.attribute("original");
            if (tagName == "SubDir")
            {
                item = new QTreeWidgetItem(ui->treeWidget);
				item->setIcon(0, QIcon(":/yellow_folder.png"));
                item->setText(0, dirName);
				item->setText(1, original);
				
                if (checked == "2")
                {item->setCheckState(0, Qt::Checked);}
                else if(checked=="1")
                {
                    item->setCheckState(0, Qt::PartiallyChecked);
                }
                else
                {item->setCheckState(0, Qt::Unchecked);}
                getNode(elment, item);
                item->setExpanded(true);
            }
			
			
    //        else if ((tagName == "Item")&&(elment.parentNode().toElement().tagName=="SubDir"))
    //        {
    //            QTreeWidgetItem * subItem = new QTreeWidgetItem(item);
				//subItem->setIcon(0, QIcon(":/yellow_folder.png"));
    //            subItem->setText(0, dirName);
		//	      subItem->setText(1, original);
    //            if (checked == "2")
    //            {subItem->setCheckState(0, Qt::Checked);}
    //            else if(checked=="1")
    //            {
    //                item->setCheckState(0, Qt::PartiallyChecked);
				//	
    //            }
    //            else
    //            {subItem->setCheckState(0, Qt::Unchecked);}
    //            getNode(elment, subItem);
    //            subItem->setExpanded(true);
    //        }
            else if (tagName == "Item")
            {
                QTreeWidgetItem * subItem = new QTreeWidgetItem(item);
				subItem->setIcon(0, QIcon(":/yellow_folder.png"));
				subItem->setText(1, original);
				if (elment.parentNode().toElement().tagName() != "SubDir")
				{
					subItem->setHidden(true);
				}
				//subItem->setHidden(true);
                subItem->setText(0, dirName);
                if (checked == "2")
                {
					subItem->setCheckState(0, Qt::Checked);
				}
                else if(checked=="1")
                {
                    item->setCheckState(0, Qt::PartiallyChecked);
                }
                else
                {
					subItem->setCheckState(0, Qt::Unchecked);
				}
                getNode(elment, subItem);
                subItem->setExpanded(true);
            }
        }
        node = node.nextSibling();
    }
}


void DirManageWidget::setChildItemUnchecked(QTreeWidgetItem *item)
{
    int count = item->childCount();
    if (count < 1)return;
    for (int i = 0; i < count; i++)
    {
        QTreeWidgetItem* chidItem = item->child(i);
        chidItem->setCheckState(0, Qt::Unchecked);
        if (chidItem->childCount() > 0)
        {
            setChildItemUnchecked(chidItem);
        }
    }
}

void DirManageWidget::setChildItemChecked(QTreeWidgetItem *item)
{
    int count = item->childCount();
    if (count <1)return;
    for (int i = 0; i < count; i++)
    {
        QTreeWidgetItem* chidItem = item->child(i);
        chidItem->setCheckState(0, Qt::Checked);
        if (chidItem->childCount() > 0)
        {
            setChildItemChecked(chidItem);
        }
    }
}

void DirManageWidget::HandleNewSameClassDirClicked()
{
    if(currentTree==NULL)
    {
        QMessageBox::warning(this, QString::fromLocal8Bit("警告信息"),
                             QString::fromLocal8Bit("请先点击选择参考文件夹(目录)位置!"), QMessageBox::Ok);
        return ;
    }
    QWidget *DirNameInputWidget=new QWidget;
	DirNameInputWidget->setObjectName("DirNameInputWidget");

    DirNameInputWidget->setWindowTitle(QString::fromLocal8Bit("新建同级目录"));
    QLabel *label=new QLabel(QString::fromLocal8Bit("请输入文件夹名称:"));
    QLineEdit* le_DirName=new QLineEdit;
    QHBoxLayout* horizontalLayout_1 = new QHBoxLayout();
    horizontalLayout_1->addWidget(label);
    horizontalLayout_1->addWidget(le_DirName);
    QSpacerItem *horizontalSpacer1 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
    QPushButton *btn=new QPushButton(QString::fromLocal8Bit("确定"));
    QSpacerItem *horizontalSpacer2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
    QHBoxLayout* horizontalLayout_2 = new QHBoxLayout();
    horizontalLayout_2->addItem(horizontalSpacer1);
    horizontalLayout_2->addWidget(btn);
    horizontalLayout_2->addItem(horizontalSpacer2);


    QGridLayout *gLayout=new QGridLayout(DirNameInputWidget);
    gLayout->addLayout(horizontalLayout_1,0,0,1,1);
    gLayout->addLayout(horizontalLayout_2,1,0,1,1);
	gLayout->setVerticalSpacing(20);
    DirNameInputWidget->setWindowModality(Qt::WindowModal);
    DirNameInputWidget->setWindowModality(Qt::ApplicationModal);
    DirNameInputWidget->show();

    connect(btn,&QPushButton::clicked,[=](){
        QString name=le_DirName->text();
        QTreeWidgetItem *newItem=new QTreeWidgetItem;

        newItem->setText(0,name);
		newItem->setIcon(0, QIcon(":/yellow_folder.png"));
		newItem->setText(1, "false");
        newItem->setCheckState(0,Qt::Checked);
        if (name.isEmpty() || name.isNull())
        {
            QMessageBox::warning(this, QString::fromLocal8Bit("警告信息"),
                                 QString::fromLocal8Bit("名称不能为空!"), QMessageBox::Ok);
            return;
        }
        QTreeWidgetItem *currentItem = currentTree->currentItem();
        if(NULL==currentItem->parent()&&(currentTree->indexOfTopLevelItem(currentItem)>=0))
        {
            QTreeWidgetItem *currentItemParent=currentTree->invisibleRootItem();
            //判断当前节点的子节点是否包含该名称
            int count = currentItemParent->childCount();
            if (count > 0)
            {
                for (int i = 0; i < count; i++)
                {
                    QTreeWidgetItem *childItem = currentItemParent->child(i);
                    if (childItem->text(0)==name)
                    {
                        QMessageBox::warning(this, QString::fromLocal8Bit("警告信息"),
                                             QString::fromLocal8Bit("目录重复,请重新输入!"), QMessageBox::Ok);
                        return;
                    }
                }
            }

            currentTree->addTopLevelItem(newItem);

        }
        else if(NULL!=currentItem->parent())
        {
            QTreeWidgetItem *currentItemParent=currentItem->parent();
            //判断当前节点的子节点是否包含该名称
            int count = currentItemParent->childCount();
            if (count > 0)
            {
                for (int i = 0; i < count; i++)
                {
                    QTreeWidgetItem *childItem = currentItemParent->child(i);
                    if (childItem->text(0)==name)
                    {
                        QMessageBox::warning(this, QString::fromLocal8Bit("警告信息"),
                                             QString::fromLocal8Bit("目录重复,请重新输入!"), QMessageBox::Ok);
                        return;
                    }
                }
            }

            currentItemParent->insertChild(currentItemParent->indexOfChild(currentItem)+1,newItem);
            currentItem->setSelected(true);
            currentTree->setCurrentItem(newItem);
        }
        if(currentTree==ui->treeWidget_2&&currentTree->indexOfTopLevelItem(currentItem)>=0)
        {
            QTreeWidgetItem *newItem=new QTreeWidgetItem;
            newItem->setText(0,name);
			newItem->setIcon(0, QIcon(":/yellow_folder.png"));
			newItem->setText(1,"false");
            newItem->setCheckState(0,Qt::Checked);
            ui->treeWidget->addTopLevelItem(newItem);
        }
        else
        {
            updateLeftTree();
        }
		DirNameInputWidget->close();
    });

}

void DirManageWidget::HandleNewSubDirClicked()
{
    if(currentTree==NULL)
    {
        QMessageBox::warning(this, QString::fromLocal8Bit("警告信息"),
                             QString::fromLocal8Bit("请先点击选择参考文件夹(目录)位置!"), QMessageBox::Ok);
        return ;
    }
    QWidget *DirNameInputWidget=new QWidget;
	DirNameInputWidget -> setObjectName("DirNameInputWidget");
    DirNameInputWidget->setWindowTitle(QString::fromLocal8Bit("新建子目录"));
    QLabel *label=new QLabel(QString::fromLocal8Bit("请输入文件夹名称:"));
    QLineEdit* le_DirName=new QLineEdit;
    QHBoxLayout* horizontalLayout_1 = new QHBoxLayout();
    horizontalLayout_1->addWidget(label);
    horizontalLayout_1->addWidget(le_DirName);
    QSpacerItem *horizontalSpacer1 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
    QPushButton *btn=new QPushButton(QString::fromLocal8Bit("确定"));
    QSpacerItem *horizontalSpacer2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
    QHBoxLayout* horizontalLayout_2 = new QHBoxLayout();
    horizontalLayout_2->addItem(horizontalSpacer1);
    horizontalLayout_2->addWidget(btn);
    horizontalLayout_2->addItem(horizontalSpacer2);

    QGridLayout *gLayout=new QGridLayout(DirNameInputWidget);
    gLayout->addLayout(horizontalLayout_1,0,0,1,1);
    gLayout->addLayout(horizontalLayout_2,1,0,1,1);
	gLayout->setVerticalSpacing(20);
    DirNameInputWidget->setWindowModality(Qt::WindowModal);
    DirNameInputWidget->setWindowModality(Qt::ApplicationModal);
    DirNameInputWidget->show();

    connect(btn,&QPushButton::clicked,[=](){
        QString name=le_DirName->text();
        if (name.isEmpty() || name.isNull())
        {
            QMessageBox::warning(this, QString::fromLocal8Bit("警告信息"),
                                 QString::fromLocal8Bit("名称不能为空!"), QMessageBox::Ok);
            return;
        }
        QTreeWidgetItem *currentItem = currentTree->currentItem();

        //判断当前节点的子节点是否包含该名称
        int count = currentItem->childCount();
        if (count > 0)
        {
            for (int i = 0; i < count; i++)
            {
                QTreeWidgetItem *childItem = currentItem->child(i);
				
                if (childItem->text(0).compare(name) == 0)
                {
                    QMessageBox::warning(this, QString::fromLocal8Bit("警告信息"),
                                         QString::fromLocal8Bit("目录重复,请重新输入!"), QMessageBox::Ok);
                    return;
                }
            }
        }
        QTreeWidgetItem * subItem = new QTreeWidgetItem(currentItem);
		subItem->setIcon(0, QIcon(":/yellow_folder.png"));
        subItem->setText(0, name);
		subItem->setText(1, "false");
        subItem->setCheckState(0, Qt::Checked);
        //        subItem->setHidden(true);
        currentItem->setExpanded(true);
        if(currentTree==ui->treeWidget)
        {
            updateRightTree(leftLinkRightItem,0);
        }
        else if(currentTree==ui->treeWidget_2)
        {
            updateLeftTree();
        }
		DirNameInputWidget->close();
    });
}

void DirManageWidget::hideChildrenOfTop(QTreeWidget *treeWidget)
{
    //for(int i=0;i<treeWidget->topLevelItemCount();i++)
    //{
    //    QTreeWidgetItem *TopItem_i=treeWidget->topLevelItem(i);
    //    int childCountOfTopItemI=TopItem_i->childCount();
    //    for(int j=0;j<childCountOfTopItemI;j++)
    //    {
    //        if(TopItem_i->child(j)->isHidden()==false)
    //        {
    //            TopItem_i->child(j)->setHidden(true);
    //        }
    //    }
    //}
}

void DirManageWidget::updateParentItem(QTreeWidgetItem *item)
{
    QTreeWidgetItem *parent = item->parent();
    if (parent == NULL)
        return;

    int nSelectedCount = 0;
    int childCount = parent->childCount();

    for (int i = 0; i < childCount; i++) //判断有多少个子项被选中
    {
        QTreeWidgetItem* childItem = parent->child(i);
        if (childItem->checkState(0) == Qt::Checked|| childItem->checkState(0) == Qt::PartiallyChecked)
        {
            nSelectedCount++;
        }
    }

    if (nSelectedCount <= 0)  //如果没有子项被选中,父项设置为未选中状态
    {
        parent->setCheckState(0, Qt::Unchecked);
    }
    else if ((nSelectedCount > 0) && (nSelectedCount < childCount))    //如果有部分子项被选中,父项设置为部分选中状态,即用灰色显示
    {
        parent->setCheckState(0, Qt::PartiallyChecked);
    }
    else if (nSelectedCount == childCount)    //如果子项全部被选中,父项则设置为选中状态
    {
        parent->setCheckState(0, Qt::Checked);
    }
    updateParentItem(parent);
}

void DirManageWidget::setItemEditable(QTreeWidgetItem* item, int column)
{
	//item->setFlags(item->flags() | Qt::ItemIsEditable | Qt::ItemIsEnabled);
	//currentTree->editItem(item,0);
	qDebug() << "double click" << item->text(0);
}
void DirManageWidget::updateRightTree(QTreeWidgetItem *item,int column)
{
    leftLinkRightItem=item;
    ui->treeWidget_2->clear();
	if (item == NULL)
	{
		return;
	}
    QTreeWidgetItem *rightTree=item->clone();
    ui->treeWidget_2->addTopLevelItem(rightTree);
    ui->treeWidget_2->expandAll();
    if(ui->treeWidget_2->isHidden()==true)
    {
        ui->treeWidget_2->setHidden(false);
    }

}

void DirManageWidget::updateLeftTree()
{
    if(ui->treeWidget_2->topLevelItemCount()==0) //右侧树节点为0,即全部被删除
    {
        if(ui->treeWidget->indexOfTopLevelItem(leftLinkRightItem)!=-1) //左侧是一级节点
        {
            ui->treeWidget->takeTopLevelItem(ui->treeWidget->indexOfTopLevelItem(leftLinkRightItem)); //删除左侧一级节点
        }
        else //否则将右侧数据替换掉左侧相应树
        {
            QTreeWidgetItem* leftLinkRightItemParent=leftLinkRightItem->parent();
            int index=leftLinkRightItemParent->indexOfChild(leftLinkRightItem);
            leftLinkRightItemParent->takeChild(index);
        }
        return ;
    }

    int leftCurrentItemIndex=ui->treeWidget->indexOfTopLevelItem(leftLinkRightItem);
    if((leftLinkRightItem->parent()==NULL)&&(leftCurrentItemIndex>=0)) // 如果左侧是顶级节点
    {
        QString leftLinkRightItemText=leftLinkRightItem->text(0);
        delete leftLinkRightItem;

        ui->treeWidget->insertTopLevelItem(leftCurrentItemIndex,ui->treeWidget_2->invisibleRootItem()->child(0)->clone());
        leftLinkRightItem=ui->treeWidget->topLevelItem(leftCurrentItemIndex);
        ui->treeWidget->setCurrentItem(leftLinkRightItem);
        leftLinkRightItem->setText(0,leftLinkRightItemText);
        int childNum=leftLinkRightItem->childCount();
		leftLinkRightItem->setExpanded(true);
        for(int i=0;i<childNum;i++)
        {
            if(ui->treeWidget->topLevelItem(leftCurrentItemIndex)->child(i)->isHidden()==true)
            {
                ui->treeWidget->topLevelItem(leftCurrentItemIndex)->child(i)->setHidden(false);
            }
			int thirdClassNodeNum =leftLinkRightItem->child(i)->childCount();
			for (int j = 0; j < thirdClassNodeNum; j++)
			{
				if (leftLinkRightItem->child(i)->child(j)->isHidden() == false)
				{
					leftLinkRightItem->child(i)->child(j)->setHidden(true);
				}
			}
        }
        leftLinkRightItem->setExpanded(true);
        return;
    }
    else
    {		
        int leftCurrentItemIndex=leftLinkRightItem->parent()->indexOfChild(leftLinkRightItem);
        QTreeWidgetItem *leftCurrentItemParent=leftLinkRightItem->parent();
        QTreeWidgetItem *rightTree=ui->treeWidget_2->invisibleRootItem()->child(0)->clone();

        delete leftLinkRightItem;
        leftCurrentItemParent->insertChild(leftCurrentItemIndex,rightTree);
        leftLinkRightItem=leftCurrentItemParent->child(leftCurrentItemIndex);

        int childNum=rightTree->childCount();
        for(int i=0;i<childNum;i++)
        {
            if(rightTree->child(i)->isHidden()==false)
            {
                rightTree->child(i)->setHidden(true);
            }
        }
    }
    hideChildrenOfTop(ui->treeWidget);
    //    ui->treeWidget->expandAll();
}

void DirManageWidget::setItemCheckState(QTreeWidgetItem *item, int column)
{
    int count = item->childCount(); //返回子项的个数
    if (Qt::Checked == item->checkState(0))
    {
        setChildItemChecked(item);
        updateParentItem(item);
    }
    else if (Qt::Unchecked == item->checkState(0))
    {
        setChildItemUnchecked(item);
        updateParentItem(item);
    }
    if(item->treeWidget()==ui->treeWidget)
    {
		leftLinkRightItem = item;
        updateRightTree(leftLinkRightItem,0);
    }
    if(item->treeWidget()==ui->treeWidget_2)
    {
        updateLeftTree();
    }
}

void DirManageWidget::setCurrentTree(QTreeWidgetItem *item, int column)
{
    currentTree =item->treeWidget();

}

void DirManageWidget::upDir()
{
    if(currentTree==ui->treeWidget)
    {
        int lTreeCurrentTopItemIndex=ui->treeWidget->indexOfTopLevelItem(ui->treeWidget->currentItem());
        if((ui->treeWidget->currentItem()!=NULL)&&(lTreeCurrentTopItemIndex>0))
        {
            QTreeWidgetItem * lastItem=ui->treeWidget->takeTopLevelItem(lTreeCurrentTopItemIndex-1);
            ui->treeWidget->insertTopLevelItem(lTreeCurrentTopItemIndex,lastItem);
        }
        hideChildrenOfTop(ui->treeWidget);

    }
    else if(currentTree==ui->treeWidget_2)
    {
        if(ui->treeWidget_2->currentItem()==NULL)
        {
            return ;
        }
        int rTreeCurrentTopItemIndex=ui->treeWidget_2->indexOfTopLevelItem(ui->treeWidget_2->currentItem());

        if(ui->treeWidget_2->currentItem()!=NULL&&rTreeCurrentTopItemIndex>0)//右侧树顶级节点
        {
            QTreeWidgetItem * lastItem=ui->treeWidget_2->takeTopLevelItem(rTreeCurrentTopItemIndex-1);
            ui->treeWidget_2->insertTopLevelItem(rTreeCurrentTopItemIndex,lastItem);
            updateLeftTree();
        }
        if(ui->treeWidget_2->currentItem()!=NULL&&rTreeCurrentTopItemIndex==-1)//右侧树子级节点
        {
            QTreeWidgetItem * currentItemParent=ui->treeWidget_2->currentItem()->parent();
            int currentItemIndexOfParent=currentItemParent->indexOfChild(ui->treeWidget_2->currentItem());
            if(currentItemIndexOfParent==0)
            {
                return;
            }
            QTreeWidgetItem * lastItem=currentItemParent->takeChild(currentItemIndexOfParent-1);
            currentItemParent->insertChild(currentItemIndexOfParent,lastItem);
            updateLeftTree();
        }

    }
}

void DirManageWidget::downDir()
{
    if(currentTree==ui->treeWidget)
    {
        int lTreeCurrentTopItemIndex=ui->treeWidget->indexOfTopLevelItem(ui->treeWidget->currentItem());
        int lTreeTopLevelItemCount=ui->treeWidget->topLevelItemCount();
        if((ui->treeWidget->currentItem()!=NULL)&&(lTreeCurrentTopItemIndex<lTreeTopLevelItemCount-1))
        {
            QTreeWidgetItem * nextItem=ui->treeWidget->takeTopLevelItem(lTreeCurrentTopItemIndex+1);
            ui->treeWidget->insertTopLevelItem(lTreeCurrentTopItemIndex,nextItem);
        }
        hideChildrenOfTop(ui->treeWidget);

    }
    else if(currentTree==ui->treeWidget_2)
    {
        if(ui->treeWidget_2->currentItem()==NULL)
        {
            return ;
        }
        int rTreeCurrentTopItemIndex=ui->treeWidget_2->indexOfTopLevelItem(ui->treeWidget_2->currentItem());
        int rTreeTopLevelItemCount=ui->treeWidget_2->topLevelItemCount();
        if((ui->treeWidget_2->currentItem()!=NULL)&&(rTreeCurrentTopItemIndex!=-1)&&(rTreeCurrentTopItemIndex<rTreeTopLevelItemCount-1))//右侧树顶级节点
        {
            QTreeWidgetItem * nextItem=ui->treeWidget_2->takeTopLevelItem(rTreeCurrentTopItemIndex+1);
            ui->treeWidget_2->insertTopLevelItem(rTreeCurrentTopItemIndex,nextItem);
            updateLeftTree();
        }
        if(ui->treeWidget_2->currentItem()!=NULL&&rTreeCurrentTopItemIndex==-1)//右侧树子级节点
        {
            QTreeWidgetItem * currentItemParent=ui->treeWidget_2->currentItem()->parent();
            int currentItemIndexOfParent=currentItemParent->indexOfChild(ui->treeWidget_2->currentItem());
            if(currentItemIndexOfParent==currentItemParent->childCount()-1)
            {
                return;
            }
            QTreeWidgetItem * nextItem=currentItemParent->takeChild(currentItemIndexOfParent+1);
            currentItemParent->insertChild(currentItemIndexOfParent,nextItem);
            updateLeftTree();
        }
    }
}

void DirManageWidget::delDir()
{
	if (currentTree->currentItem()->text(1) == "true")
	{
		QMessageBox::warning(this, QString::fromLocal8Bit("警告信息"),
                             QString::fromLocal8Bit("系统自带文件夹不可以删除,仅用户新增的目录可以删除或者修改!"), QMessageBox::Ok);
        return;
	}
    if((currentTree==ui->treeWidget)&&(ui->treeWidget->currentItem()!=NULL)) //左树、左树当前节点不为空
    {
        if(ui->treeWidget->indexOfTopLevelItem(ui->treeWidget->currentItem())!=-1) //左树顶级节点
        {
            ui->treeWidget->takeTopLevelItem(ui->treeWidget->indexOfTopLevelItem(ui->treeWidget->currentItem()));
            ui->treeWidget_2->clear();
        }
		else
		{
			int index=ui->treeWidget->currentItem()->parent()->indexOfChild(ui->treeWidget->currentItem());
            ui->treeWidget->currentItem()->parent()->takeChild(index);
			ui->treeWidget_2->clear();
		}
        return;
    }
    if((currentTree==ui->treeWidget_2)&&(ui->treeWidget_2->currentItem()!=NULL))
    {
        //右数顶级节点
        if(ui->treeWidget_2->indexOfTopLevelItem(ui->treeWidget_2->currentItem())!=-1)
        {
            ui->treeWidget_2->takeTopLevelItem(ui->treeWidget_2->indexOfTopLevelItem(ui->treeWidget_2->currentItem()));
        }
        else//右数子级节点
        {
			int index = ui->treeWidget_2->currentItem()->parent()->indexOfChild(ui->treeWidget_2->currentItem());
			ui->treeWidget_2->currentItem()->parent()->takeChild(index);
        }
        updateLeftTree();
    }
}

void DirManageWidget::modifyDir()
{
    if(currentTree==NULL||currentTree->currentItem()==NULL)
    {
//        qDebug()<<currentTree<<""<<currentTree->currentItem();
        QMessageBox::warning(this, QString::fromLocal8Bit("警告信息"),
                             QString::fromLocal8Bit("请点击选中需要修改的目录!"), QMessageBox::Ok);
        return;
    }
	if (currentTree->currentItem()->text(1) == "true")
	{
		QMessageBox::warning(this, QString::fromLocal8Bit("警告信息"),
			QString::fromLocal8Bit("系统自带文件夹不可以删除,仅用户新增的目录可以删除或者修改!"), QMessageBox::Ok);
		return;
	}
    QTreeWidgetItem* current = currentTree->currentItem();
    QString treeText = current->text(0);
    QWidget *modifyDirNameWidget=new QWidget;
	modifyDirNameWidget->setObjectName("modifyDirNameWidget");

    modifyDirNameWidget->setWindowTitle(QString::fromLocal8Bit("修改目录名称"));
    QLabel *label=new QLabel(QString::fromLocal8Bit("请输入目录名称:"));
    QLineEdit* le_DirName=new QLineEdit(treeText);
    QHBoxLayout* horizontalLayout_1 = new QHBoxLayout();
    horizontalLayout_1->addWidget(label);
    horizontalLayout_1->addWidget(le_DirName);
    QSpacerItem *horizontalSpacer1 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
    QPushButton *btn=new QPushButton(QString::fromLocal8Bit("确定"));
    QSpacerItem *horizontalSpacer2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
    QHBoxLayout* horizontalLayout_2 = new QHBoxLayout();
    horizontalLayout_2->addItem(horizontalSpacer1);
    horizontalLayout_2->addWidget(btn);
    horizontalLayout_2->addItem(horizontalSpacer2);

    QGridLayout *gLayout=new QGridLayout(modifyDirNameWidget);
    gLayout->addLayout(horizontalLayout_1,0,0,1,1);
    gLayout->addLayout(horizontalLayout_2,1,0,1,1);
	gLayout->setVerticalSpacing(20);
    modifyDirNameWidget->setWindowModality(Qt::WindowModal);
    modifyDirNameWidget->setWindowModality(Qt::ApplicationModal);
    modifyDirNameWidget->show();

    connect(btn,&QPushButton::clicked,[=](){
        QString name=le_DirName->text();
        if (name.isEmpty() || name.isNull())
        {
            QMessageBox::warning(this, QString::fromLocal8Bit("警告信息"),
                                 QString::fromLocal8Bit("名称不能为空!"), QMessageBox::Ok);
            return;
        }

        current->setText(0,name);
        if(currentTree==ui->treeWidget)
        {
            updateRightTree(current,0);
        }
        else{
            updateLeftTree();
        }
		modifyDirNameWidget->close();
    });

}

void DirManageWidget::saveDir()
{
	QString TaskXml_2 = SQLiteDbHelper::ModelTask.ResultPath + "/" + QString::fromLocal8Bit("任务基本信息.xml");
	QFile TaskXmlFile(TaskXml_2);
	if (!TaskXmlFile.exists() || TaskXmlFile.size() == 0)
	{
		QMessageBox::information(NULL, QString::fromLocal8Bit("错误"), QString::fromLocal8Bit("任务基本信息尚未完成,请完成并保存"));
		return ;
	}
	QString	filePath = QCoreApplication::applicationDirPath() + "/DirManageXml/" + SQLiteDbHelper::ModelTask.RemittanceDate + "_" + SQLiteDbHelper::ModelTask.TaskID + "_" + SQLiteDbHelper::ModelTask.undertake +".xml";
    WriteMenuXml(filePath);
	//再写一份到包里面
	QString dirNameCopy = SQLiteDbHelper::ModelTask.ResultPath + "/DirManageXml/";
	QDir dirCopy(dirNameCopy);
	if (!dirCopy.exists())
		dirCopy.mkpath(dirNameCopy);
	QString FileNameCopy = dirNameCopy + SQLiteDbHelper::ModelTask.RemittanceDate + "_" + SQLiteDbHelper::ModelTask.TaskID + "_" + SQLiteDbHelper::ModelTask.undertake + ".xml";
	WriteMenuXml(FileNameCopy);
    //QMessageBox::information(NULL, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("保存成功!"));
}

void DirManageWidget::generateDir()
{
    QString rootDir = ui->lineEdit_RootDir->text();
    QDir dir_2(rootDir);
    if (!dir_2.exists())
    {
        QMessageBox::information(NULL, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("生成目录失败!\n 根目录填写错误,不存在该根目录。"));
        return;
    }


    //rootDir.append("/"+SQLiteDbHelper::ModelTask.TaskName+"/" + SQLiteDbHelper::ModelTask.TaskID);
    //rootDir.append(QString("/%1_%2_%3")
    //    .arg(SQLiteDbHelper::ModelTask.RemittanceDate).arg(SQLiteDbHelper::ModelTask.TaskID).arg(SQLiteDbHelper::ModelTask.undertake));
	
    QDir dir_3(rootDir);
    //if (dir_3.exists())
    //{
    //    /*QMessageBox::information(NULL, "提示", "新建汇交目录已存在,是否继续?",
    //        QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);*/
    //    QMessageBox Msg(QMessageBox::Question, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("新建汇交包已存在,是否继续?"));
    //    QAbstractButton *pYesBtn = (QAbstractButton *)Msg.addButton(QString::fromLocal8Bit("是"), QMessageBox::YesRole);
    //    QAbstractButton *pNoBtn = (QAbstractButton *)Msg.addButton(QString::fromLocal8Bit("否"), QMessageBox::NoRole);
    //    Msg.exec();
    //    if (Msg.clickedButton() != pYesBtn)
    //    {
    //        return;
    //    }
    //}

    //deleteDir(rootDir);
    QList<QTreeWidgetItem*> lstItem;//记录叶子节点
    QTreeWidgetItemIterator it(ui->treeWidget);

    lstDir.clear();

    int count = ui->treeWidget->topLevelItemCount();
    for (int i = 0; i < count; i++)
    {
        QTreeWidgetItem* item = ui->treeWidget->topLevelItem(i);
        if (item->checkState(0) == false)continue;
        QString outDir = "/";
        outDir += item->text(0);
        getItem(item, outDir);
    }

    for (auto tempDir : lstDir)
    {
        QString fullDir = rootDir + tempDir;
        QDir dir;
        bool b = dir.mkpath(fullDir);
    }
    QMessageBox::information(NULL, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("目录生成成功!"));

    //将D:\code\datareviewsystemii\Output\BinD\VS2015_x64\TaskXml\任务号对应的.xml文件复制到CurrentRootDir目录中并修改名为任务基本信息.xml
    QString CurrentRootDir = ui->lineEdit_RootDir->text();
    SQLiteDbHelper::ModelTask.Path = rootDir;
    SQLiteDbHelper::ModelTask.RootDir = ui->lineEdit_RootDir->text();
    SQLiteDbHelper::GetInstance()->UpdateTask(SQLiteDbHelper::ModelTask, SQLiteDbHelper::ModelTask);
    SQLiteDbHelper::GetInstance()->UpdateTHistory(SQLiteDbHelper::ModelTask, SQLiteDbHelper::ModelTask);
}
//
//void DirManageWidget::enterDir()
//{
//
//	QString ss = QStringLiteral("D:/code/datareviewsystemii/Output/BinD/VS2015_x64/OceanData/20200409_GASI-03-PAC-ST-Mswin_中国海洋大学/20200409_GASI-03-PAC-ST-Mswin_中国海洋大学");
	QString strFile = ui->lineEdit_RootDir->text();
//    QString filePath = "file:" + ss;
//	qDebug() << filePath;
	filePath.data();
	QTextCodec *code = QTextCodec::codecForLocale();//解决中文路径问题
	qDebug()<<code->fromUnicode(filePath).data();
	QString path = code->fromUnicode(filePath).toPercentEncoding();
//    //QString filePath = "file:D:/";
//	//QDesktopServices::openUrl(QUrl::fromEncoded(filePath.cs));
//    //QDesktopServices::openUrl(QUrl(filePath, QUrl::TolerantMode));
//		//QDesktopServices::openUrl(path.data());
//
//	QFileDialog pFileDialog;
//
//	const QStringList fileNames = QFileDialog::getOpenFileNames(this,
//			QString::fromLocal8Bit("打开文件"), ss,
//			QString::fromLocal8Bit("图片文件(*.jpg;*.png;*.bmp;*.gif;)"));
//}
void DirManageWidget::enterRootDir()
{
	/* QString filePath = "file:" + ui->lineEdit_RootDir->text() + "/"+SQLiteDbHelper::ModelTask.TaskName+"/" + SQLiteDbHelper::ModelTask.TaskID;*/
	//QString filePath = "file:D:/";
	QString rootDir = ui->lineEdit_RootDir->text();
	QDir dir_2(rootDir);
	if (!dir_2.exists())
	{
		QMessageBox::information(NULL, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("根目录填写错误,不存在该根目录。"));
		return;
	}
	QString filePath = "file:" + rootDir;
	QDesktopServices::openUrl(QUrl(filePath, QUrl::TolerantMode));
}

void DirManageWidget::enterDir()
{
	QTreeWidgetItem *currentItem = currentTree->currentItem();
	if (SQLiteDbHelper::ModelTask.Path.isEmpty())
	{
		QMessageBox::warning(this, QString::fromLocal8Bit("警告信息"),
			QString::fromLocal8Bit("任务路径根目录为空!请设置根目录!"), QMessageBox::Ok);
		return;
	}
	if (QDir(SQLiteDbHelper::ModelTask.Path).exists()==false)
	{
		QMessageBox::warning(this, QString::fromLocal8Bit("警告信息"),
			QString::fromLocal8Bit("根目录不存在!"), QMessageBox::Ok);
		return;
	}
	QString dataFullPath;
	if (currentTree == ui->treeWidget)
	{
		if (currentItem != NULL)
		{
			QString treePath = currentItem->text(0);
			QTreeWidgetItem *temp = new QTreeWidgetItem;
			temp = currentItem;
			while ((temp != NULL) && (temp->parent() != NULL) && (temp != ui->treeWidget->invisibleRootItem()))
			{
				treePath = QString("%1/%2").arg(temp->parent()->text(0)).arg(treePath);
				temp = temp->parent();
			}
			dataFullPath = SQLiteDbHelper::ModelTask.Path + "/" + treePath;
		}
	}
	else if (currentTree == ui->treeWidget_2)
	{
		QString leftTreePath ="";
		QString rightTreePath = currentItem->text(0);
		if (currentItem != NULL)
		{
			
			QTreeWidgetItem *temp = new QTreeWidgetItem;
			temp = currentItem;
			while ((temp != NULL) && (temp->parent() != NULL) && (temp != ui->treeWidget->invisibleRootItem()))
			{
				rightTreePath = QString("%1/%2").arg(temp->parent()->text(0)).arg(rightTreePath);
				temp = temp->parent();
			}
		}
		else
		{
			qDebug() << "error currentItem != NULL";
		}
		if (leftLinkRightItem != NULL)
		{

			QTreeWidgetItem *temp = new QTreeWidgetItem;
			temp = leftLinkRightItem;
			while ((temp != NULL) && (temp->parent() != NULL) && (temp != ui->treeWidget->invisibleRootItem()))
			{
				leftTreePath = QString("%1/%2").arg(temp->parent()->text(0)).arg(leftTreePath);
				temp = temp->parent();
			}
		}
		else
		{
			qDebug() << "error leftLinkRightItem != NULL";
		}
			dataFullPath = SQLiteDbHelper::ModelTask.Path + "/" + leftTreePath+ "/"+ rightTreePath;
	}
	if (!QDir(dataFullPath).exists())
	{
		QMessageBox::information(NULL, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("根目录填写错误,不存在该根目录。"));
		return;
	}
	QString filePath = "file:" + dataFullPath;
	QDesktopServices::openUrl(QUrl(filePath, QUrl::TolerantMode));
}


void DirManageWidget::setDir()
{
    QFileDialog* fileDialog = new QFileDialog(this);
    fileDialog->setWindowTitle(QString::fromLocal8Bit("设置数据存储根目录"));
    fileDialog->setFileMode(QFileDialog::DirectoryOnly);
    QStringList fileName;
    if (fileDialog->exec() == QFileDialog::Accepted)
    {
        fileName = fileDialog->selectedFiles();
		//文件夹生成目录=用户选择目录/项目创建日期+任务ID+任务机构		
		QString dataSavePath=fileName.at(0)+ "/" + SQLiteDbHelper::ModelTask.RemittanceDate + "_" + SQLiteDbHelper::ModelTask.TaskID + "_" + SQLiteDbHelper::ModelTask.undertake;
		if (QDir(dataSavePath).exists()==false)
		{
			QDir dir;
			bool b = dir.mkpath(dataSavePath);
		}
		ui->lineEdit_RootDir->setText(dataSavePath);
		SQLiteDbHelper::ModelTask.Path = dataSavePath;
		SQLiteDbHelper::GetInstance()->UpdateTHistory(SQLiteDbHelper::ModelTask, SQLiteDbHelper::ModelTask);
    }
    else
    {
        return;
    }
}

void DirManageWidget::recover()
{
    QString FileName = QCoreApplication::applicationDirPath() + "/DirManageXml/dirConfig.xml";
    ui->treeWidget->clear();
    ui->treeWidget_2->clear();
    ReadMenuXml(FileName);

    WriteMenuXml(FileName);
}

void DirManageWidget::checkAllItem()
{
	ui->treeWidget->invisibleRootItem()->setCheckState(0, Qt::Checked);
	setItemCheckState(ui->treeWidget->invisibleRootItem(), 0);
	ui->treeWidget->setHeaderHidden(true);
	ui->treeWidget_2->clear();
}

void DirManageWidget::uncheckAllItem()
{
	ui->treeWidget->invisibleRootItem()->setCheckState(0,Qt::Unchecked);
	setItemCheckState(ui->treeWidget->invisibleRootItem(), 0);
	ui->treeWidget->setHeaderHidden(true);
	ui->treeWidget_2->clear();
}

ui_dirmanagewidget.h

/********************************************************************************
** Form generated from reading UI file 'dirmanagewidget.ui'
**
** Created by: Qt User Interface Compiler version 5.9.4
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_DIRMANAGEWIDGET_H
#define UI_DIRMANAGEWIDGET_H

#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QTreeWidget>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_DirManageWidget
{
public:
    QGridLayout *gridLayout_3;
    QGroupBox *groupBox;
    QGridLayout *gridLayout;
    QWidget *widget;
    QHBoxLayout *horizontalLayout_3;
    QHBoxLayout *horizontalLayout_2;
    QPushButton *btn_newSubDir;
    QPushButton *btn_upDir;
    QPushButton *btn_downDir;
    QPushButton *btn_delDir;
    QPushButton *btn_renameDir;
    QPushButton *btn_saveToXml;
    QPushButton *btn_Recover;
    QSpacerItem *horizontalSpacer;
    QHBoxLayout *horizontalLayout;
    QLabel *label;
    QLineEdit *lineEdit_RootDir;
    QPushButton *btn_setDir;
    QSpacerItem *horizontalSpacer_2;
    QPushButton *btn_checkAll;
    QPushButton *btn_uncheckAll;
    QLabel *label_2;
    QSpacerItem *horizontalSpacer_4;
    QPushButton *btn_generateDir;
    QSpacerItem *horizontalSpacer_3;
    QPushButton *btn_enterDir;
    QTreeWidget *treeWidget;
    QTreeWidget *treeWidget_2;

    void setupUi(QWidget *DirManageWidget)
    {
        if (DirManageWidget->objectName().isEmpty())
            DirManageWidget->setObjectName(QStringLiteral("DirManageWidget"));
        DirManageWidget->resize(1343, 872);
        gridLayout_3 = new QGridLayout(DirManageWidget);
        gridLayout_3->setObjectName(QStringLiteral("gridLayout_3"));
        groupBox = new QGroupBox(DirManageWidget);
        groupBox->setObjectName(QStringLiteral("groupBox"));
        gridLayout = new QGridLayout(groupBox);
        gridLayout->setObjectName(QStringLiteral("gridLayout"));
        widget = new QWidget(groupBox);
        widget->setObjectName(QStringLiteral("widget"));
        horizontalLayout_3 = new QHBoxLayout(widget);
        horizontalLayout_3->setObjectName(QStringLiteral("horizontalLayout_3"));
        horizontalLayout_2 = new QHBoxLayout();
        horizontalLayout_2->setObjectName(QStringLiteral("horizontalLayout_2"));
        horizontalLayout_2->setContentsMargins(-1, -1, -1, 2);
        btn_newSubDir = new QPushButton(widget);
        btn_newSubDir->setObjectName(QStringLiteral("btn_newSubDir"));
        btn_newSubDir->setCheckable(true);

        horizontalLayout_2->addWidget(btn_newSubDir);

        btn_upDir = new QPushButton(widget);
        btn_upDir->setObjectName(QStringLiteral("btn_upDir"));
        btn_upDir->setCheckable(true);

        horizontalLayout_2->addWidget(btn_upDir);

        btn_downDir = new QPushButton(widget);
        btn_downDir->setObjectName(QStringLiteral("btn_downDir"));
        btn_downDir->setCheckable(true);

        horizontalLayout_2->addWidget(btn_downDir);

        btn_delDir = new QPushButton(widget);
        btn_delDir->setObjectName(QStringLiteral("btn_delDir"));
        btn_delDir->setCheckable(true);

        horizontalLayout_2->addWidget(btn_delDir);

        btn_renameDir = new QPushButton(widget);
        btn_renameDir->setObjectName(QStringLiteral("btn_renameDir"));
        btn_renameDir->setCheckable(true);

        horizontalLayout_2->addWidget(btn_renameDir);

        btn_saveToXml = new QPushButton(widget);
        btn_saveToXml->setObjectName(QStringLiteral("btn_saveToXml"));
        btn_saveToXml->setCheckable(true);

        horizontalLayout_2->addWidget(btn_saveToXml);

        btn_Recover = new QPushButton(widget);
        btn_Recover->setObjectName(QStringLiteral("btn_Recover"));
        btn_Recover->setCheckable(true);

        horizontalLayout_2->addWidget(btn_Recover);

        horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);

        horizontalLayout_2->addItem(horizontalSpacer);


        horizontalLayout_3->addLayout(horizontalLayout_2);


        gridLayout->addWidget(widget, 0, 0, 1, 2);

        horizontalLayout = new QHBoxLayout();
        horizontalLayout->setSpacing(0);
        horizontalLayout->setObjectName(QStringLiteral("horizontalLayout"));
        label = new QLabel(groupBox);
        label->setObjectName(QStringLiteral("label"));

        horizontalLayout->addWidget(label);

        lineEdit_RootDir = new QLineEdit(groupBox);
        lineEdit_RootDir->setObjectName(QStringLiteral("lineEdit_RootDir"));
        QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
        sizePolicy.setHorizontalStretch(0);
        sizePolicy.setVerticalStretch(0);
        sizePolicy.setHeightForWidth(lineEdit_RootDir->sizePolicy().hasHeightForWidth());
        lineEdit_RootDir->setSizePolicy(sizePolicy);

        horizontalLayout->addWidget(lineEdit_RootDir);

        btn_setDir = new QPushButton(groupBox);
        btn_setDir->setObjectName(QStringLiteral("btn_setDir"));
        QSizePolicy sizePolicy1(QSizePolicy::Minimum, QSizePolicy::Preferred);
        sizePolicy1.setHorizontalStretch(0);
        sizePolicy1.setVerticalStretch(0);
        sizePolicy1.setHeightForWidth(btn_setDir->sizePolicy().hasHeightForWidth());
        btn_setDir->setSizePolicy(sizePolicy1);
        btn_setDir->setCheckable(true);

        horizontalLayout->addWidget(btn_setDir);

        horizontalSpacer_2 = new QSpacerItem(40, 30, QSizePolicy::Expanding, QSizePolicy::Minimum);

        horizontalLayout->addItem(horizontalSpacer_2);

        btn_checkAll = new QPushButton(groupBox);
        btn_checkAll->setObjectName(QStringLiteral("btn_checkAll"));
        sizePolicy1.setHeightForWidth(btn_checkAll->sizePolicy().hasHeightForWidth());
        btn_checkAll->setSizePolicy(sizePolicy1);
        btn_checkAll->setMaximumSize(QSize(35, 16777215));
        btn_checkAll->setCheckable(true);

        horizontalLayout->addWidget(btn_checkAll);

        btn_uncheckAll = new QPushButton(groupBox);
        btn_uncheckAll->setObjectName(QStringLiteral("btn_uncheckAll"));
        sizePolicy1.setHeightForWidth(btn_uncheckAll->sizePolicy().hasHeightForWidth());
        btn_uncheckAll->setSizePolicy(sizePolicy1);
        btn_uncheckAll->setMaximumSize(QSize(35, 16777215));
        btn_uncheckAll->setCheckable(true);

        horizontalLayout->addWidget(btn_uncheckAll);

        label_2 = new QLabel(groupBox);
        label_2->setObjectName(QStringLiteral("label_2"));

        horizontalLayout->addWidget(label_2);

        horizontalSpacer_4 = new QSpacerItem(40, 20, QSizePolicy::Fixed, QSizePolicy::Minimum);

        horizontalLayout->addItem(horizontalSpacer_4);

        btn_generateDir = new QPushButton(groupBox);
        btn_generateDir->setObjectName(QStringLiteral("btn_generateDir"));
        sizePolicy1.setHeightForWidth(btn_generateDir->sizePolicy().hasHeightForWidth());
        btn_generateDir->setSizePolicy(sizePolicy1);
        btn_generateDir->setCheckable(true);

        horizontalLayout->addWidget(btn_generateDir);

        horizontalSpacer_3 = new QSpacerItem(40, 20, QSizePolicy::Fixed, QSizePolicy::Minimum);

        horizontalLayout->addItem(horizontalSpacer_3);

        btn_enterDir = new QPushButton(groupBox);
        btn_enterDir->setObjectName(QStringLiteral("btn_enterDir"));
        sizePolicy1.setHeightForWidth(btn_enterDir->sizePolicy().hasHeightForWidth());
        btn_enterDir->setSizePolicy(sizePolicy1);
        btn_enterDir->setCheckable(true);

        horizontalLayout->addWidget(btn_enterDir);


        gridLayout->addLayout(horizontalLayout, 1, 0, 1, 2);

        treeWidget = new QTreeWidget(groupBox);
        QTreeWidgetItem *__qtreewidgetitem = new QTreeWidgetItem();
        __qtreewidgetitem->setText(0, QStringLiteral("1"));
        treeWidget->setHeaderItem(__qtreewidgetitem);
        treeWidget->setObjectName(QStringLiteral("treeWidget"));
        treeWidget->setMinimumSize(QSize(250, 0));
        treeWidget->setMaximumSize(QSize(250, 16777215));
        QFont font;
        font.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221"));
        font.setPointSize(12);
        treeWidget->setFont(font);

        gridLayout->addWidget(treeWidget, 2, 0, 1, 1);

        treeWidget_2 = new QTreeWidget(groupBox);
        QTreeWidgetItem *__qtreewidgetitem1 = new QTreeWidgetItem();
        __qtreewidgetitem1->setText(0, QStringLiteral("1"));
        treeWidget_2->setHeaderItem(__qtreewidgetitem1);
        treeWidget_2->setObjectName(QStringLiteral("treeWidget_2"));
        treeWidget_2->setFont(font);

        gridLayout->addWidget(treeWidget_2, 2, 1, 1, 1);


        gridLayout_3->addWidget(groupBox, 0, 0, 1, 1);


        retranslateUi(DirManageWidget);

        QMetaObject::connectSlotsByName(DirManageWidget);
    } // setupUi

    void retranslateUi(QWidget *DirManageWidget)
    {
        DirManageWidget->setWindowTitle(QApplication::translate("DirManageWidget", "Form", Q_NULLPTR));
        groupBox->setTitle(QApplication::translate("DirManageWidget", "\346\226\207\344\273\266\345\257\274\345\205\245", Q_NULLPTR));
        btn_newSubDir->setText(QApplication::translate("DirManageWidget", "\346\226\260\345\273\272\347\233\256\345\275\225", Q_NULLPTR));
        btn_upDir->setText(QApplication::translate("DirManageWidget", "\344\270\212\347\247\273", Q_NULLPTR));
        btn_downDir->setText(QApplication::translate("DirManageWidget", "\344\270\213\347\247\273", Q_NULLPTR));
        btn_delDir->setText(QApplication::translate("DirManageWidget", "\345\210\240\351\231\244", Q_NULLPTR));
        btn_renameDir->setText(QApplication::translate("DirManageWidget", "\344\277\256\346\224\271\347\233\256\345\275\225\345\220\215", Q_NULLPTR));
        btn_saveToXml->setText(QApplication::translate("DirManageWidget", "\344\277\235\345\255\230\347\233\256\345\275\225", Q_NULLPTR));
        btn_Recover->setText(QApplication::translate("DirManageWidget", "\346\201\242\345\244\215\351\273\230\350\256\244", Q_NULLPTR));
        label->setText(QApplication::translate("DirManageWidget", "\346\240\271\347\233\256\345\275\225\357\274\232", Q_NULLPTR));
        btn_setDir->setText(QApplication::translate("DirManageWidget", "\351\200\211\346\213\251", Q_NULLPTR));
        btn_checkAll->setText(QApplication::translate("DirManageWidget", "\345\205\250", Q_NULLPTR));
        btn_uncheckAll->setText(QApplication::translate("DirManageWidget", "\344\270\215", Q_NULLPTR));
        label_2->setText(QApplication::translate("DirManageWidget", "\351\200\211", Q_NULLPTR));
        btn_generateDir->setText(QApplication::translate("DirManageWidget", "\347\224\237\346\210\220\347\233\256\345\275\225", Q_NULLPTR));
        btn_enterDir->setText(QApplication::translate("DirManageWidget", "\350\277\233\345\205\245\347\233\256\345\275\225", Q_NULLPTR));
    } // retranslateUi

};

namespace Ui {
    class DirManageWidget: public Ui_DirManageWidget {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_DIRMANAGEWIDGET_H

<?xml version="1.0" encoding="UTF-8"?>
<Directorys>
    <SubDir original="true" checked="2" dirName="1.xxxxx" parentNode="root">
        <Item original="true" indexTop="0" checked="2" dirName="1.xxxxx"/>
        <Item original="true" indexTop="1" checked="2" dirName="2.方案"/>
        <Item original="true" indexTop="2" checked="2" dirName="3.计划"/>
        <Item original="true" indexTop="3" checked="2" dirName="4.报告"/>
    </SubDir>
    <SubDir original="true" checked="2" dirName="2.xxxxx" parentNode="root">
        <Item original="true" indexTop="0" checked="2" dirName="1.xxxxx">
            <Item original="true" indexTop="0" checked="2" dirName="xxxxx"/>
            <Item original="true" indexTop="1" checked="2" dirName="xxxxx">
                <Item original="true" indexTop="0" checked="2" dirName="xxxxx原始资料">
                    <Item original="true" indexTop="0" checked="2" dirName="xxxxx仪)"/>
                    <Item original="true" indexTop="1" checked="2" dirName="xxxxx"/>
                    <Item original="true" indexTop="2" checked="2" dirName=" xxxxx"/>
                    <Item original="true" indexTop="3" checked="2" dirName="其它型号"/>
                </Item>
                <Item original="true" indexTop="1" checked="2" dirName="xxxxx资料">
                    <Item original="true" indexTop="0" checked="2" dirName="xxxxx系列)"/>
                    <Item original="true" indexTop="1" checked="2" dirName="xxxxx系列)"/>
                    <Item original="true" indexTop="2" checked="2" dirName="xxxxx系列)"/>
                    <Item original="true" indexTop="3" checked="2" dirName="xxxxx系列)"/>
                    <Item original="true" indexTop="4" checked="2" dirName="其它型号的ADCP"/>
                </Item>
            </Item>
        </Item>
        <Item original="true" indexTop="1" checked="2" dirName="2.kjh">
            <Item original="true" indexTop="0" checked="2" dirName="gfd">
                <Item original="true" indexTop="0" checked="2" dirName="ffds"/>
                <Item original="true" indexTop="1" checked="2" dirName="gfd数据"/>
                <Item original="true" indexTop="2" checked="2" dirName="ds数据"/>
            </Item>
            <Item original="true" indexTop="1" checked="2" dirName="hgf">
                <Item original="true" indexTop="0" checked="2" dirName="大hgfd元数据"/>
                <Item original="true" indexTop="1" checked="2" dirName="hgf数据集及元数据"/>
                <Item original="true" indexTop="2" checked="2" dirName="hgfd编数据集及元数据"/>
            </Item>
            <Item original="true" indexTop="2" checked="2" dirName="htgfd据">
                <Item original="true" indexTop="0" checked="2" dirName="海浪资料整编数据集及元数据"/>
            </Item>
            <Item original="true" indexTop="3" checked="2" dirName="sdds据">
                <Item original="true" indexTop="0" checked="2" dirName="iuytr集及元数据"/>
            </Item>
            <Item original="true" indexTop="4" checked="2" dirName="lkjh成果数据">
                <Item original="true" indexTop="0" checked="2" dirName="likjhg料整编数据集及元数据"/>
            </Item>
            <Item original="true" indexTop="5" checked="2" dirName="其他成果数据">
                <Item original="true" indexTop="0" checked="2" dirName="ikjuhgf"/>
                <Item original="true" indexTop="1" checked="2" dirName="kljhgf"/>
            </Item>
        </Item>
        <Item original="true" indexTop="2" checked="2" dirName="3.文档报告"/>
        <Item original="true" indexTop="3" checked="2" dirName="4.其他资料"/>
    </SubDir>
   
</Directorys>

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值