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&¤tTree->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>