DSCAnalysisTool/src/ui/leftwidget.cpp

217 lines
6.9 KiB
C++
Raw Normal View History

2025-03-10 09:35:07 +00:00
#include <qdir.h>
#include <qdebug.h>
#include <QHBoxLayout>
#include "leftwidget.h"
2025-03-19 07:19:45 +00:00
#include "filemanager.h"
#include "global.h"
2025-03-10 09:35:07 +00:00
2025-09-26 08:50:48 +00:00
LeftWidget::LeftWidget(QWidget *parent ):
QDockWidget(parent)
2025-03-10 09:35:07 +00:00
{
// setStyleSheet("background-color: yellow;");
_treeWidget = new QTreeWidget();
_treeWidget->setHeaderHidden(true);
_sampleDataItem = new QTreeWidgetItem(_treeWidget);
_sampleDataItem->setText(0,"样品数据");
2025-10-20 08:16:12 +00:00
#if 0
2025-04-22 08:59:26 +00:00
_baseLineItem = new QTreeWidgetItem(_treeWidget);
_baseLineItem->setText(0,"基线");
2025-10-20 08:16:12 +00:00
#endif
2025-04-22 08:59:26 +00:00
_analysisStateItem = new QTreeWidgetItem(_treeWidget);
_analysisStateItem->setText(0,"分析状态");
2025-03-10 09:35:07 +00:00
_treeWidget->setSortingEnabled(false);
2025-04-22 08:59:26 +00:00
_treeWidget->insertTopLevelItem(0, _sampleDataItem);
2025-10-20 08:16:12 +00:00
// _treeWidget->insertTopLevelItem(1, _baseLineItem);
2025-04-22 08:59:26 +00:00
_treeWidget->insertTopLevelItem(2, _analysisStateItem);
2025-03-10 09:35:07 +00:00
2025-03-19 07:19:45 +00:00
setWidget(_treeWidget);
2025-03-10 09:35:07 +00:00
//init file name.
2025-04-15 08:03:00 +00:00
initFileName(_sampleDataItem,Global::SampleDataFloder);
2025-10-20 08:16:12 +00:00
#if 0
2025-04-15 08:03:00 +00:00
initFileName(_baseLineItem,Global::BaseLineFolder);
2025-10-20 08:16:12 +00:00
#endif
2025-04-15 08:03:00 +00:00
initFileName(_analysisStateItem,Global::AnalysisStateFolder);
2025-03-10 09:35:07 +00:00
expandAll(_sampleDataItem);
2025-10-20 08:16:12 +00:00
// expandAll(_baseLineItem);
2025-03-10 09:35:07 +00:00
expandAll(_analysisStateItem);
2025-09-26 08:50:48 +00:00
Global::updateFileList();
2025-10-20 08:16:12 +00:00
2025-03-19 07:19:45 +00:00
//connections
2025-03-20 09:28:22 +00:00
connect(_treeWidget,&QTreeWidget::itemDoubleClicked,
2025-03-19 07:19:45 +00:00
this,&LeftWidget::slotTreeWidgetItemClicked);
2025-03-10 09:35:07 +00:00
}
2025-04-22 08:59:26 +00:00
void LeftWidget::reloadFileName()
{
clearAllChildItems(_sampleDataItem);
clearAllChildItems(_baseLineItem);
clearAllChildItems(_analysisStateItem);
initFileName(_sampleDataItem,Global::SampleDataFloder);
2025-10-20 08:16:12 +00:00
#if 0
2025-04-22 08:59:26 +00:00
initFileName(_baseLineItem,Global::BaseLineFolder);
2025-10-20 08:16:12 +00:00
#endif
2025-04-22 08:59:26 +00:00
initFileName(_analysisStateItem,Global::AnalysisStateFolder);
2025-09-26 08:50:48 +00:00
// 更新文件列表
Global::updateFileList();
2025-04-22 08:59:26 +00:00
}
2025-06-20 09:28:45 +00:00
QString LeftWidget::filePathCheck(const QString fileName,const QString folderPath)
{
QString resultFileName = fileName;
QDir dir(folderPath);
QStringList files = dir.entryList(QDir::Files);
for(const QString &existedFileName:files){
QFileInfo fileInfo(existedFileName);
if(fileName == fileInfo.baseName()){
QDateTime currentDateTime = QDateTime::currentDateTime();
QString formattedTime = currentDateTime.toString("yyyy_MM_dd_HH_mm_ss");
resultFileName = fileName + QString("_") + formattedTime;
break;
}
}
return resultFileName;
}
2025-03-10 09:35:07 +00:00
void LeftWidget::initData()
{
2025-04-22 08:59:26 +00:00
// const QString folderPath = QDir::currentPath()+"/../experiment_data";
const QString folderPath = Global::SampleDataFloder;
2025-03-10 09:35:07 +00:00
#if 1
QDir dir(folderPath);
if (!dir.exists()) {
qWarning() << "文件夹不存在: " << folderPath;
return;
}
// 遍历文件
QFileInfoList fileList = dir.entryInfoList(QDir::Files | QDir::NoDotAndDotDot);
for (const QFileInfo& fileInfo : fileList) {
QFile file(fileInfo.absoluteFilePath());
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
QString content = file.readAll();
qDebug() << "读取文件 " << fileInfo.absoluteFilePath() << " 内容: " << content;
file.close();
// 写入文件操作示例:这里简单在文件末尾追加一行内容
if (file.open(QIODevice::Append | QIODevice::Text)) {
file.write("\n这是通过递归写入添加的内容");
qDebug() << "已向文件 " << fileInfo.absoluteFilePath() << " 写入内容";
file.close();
} else {
qWarning() << "无法打开文件进行写入: " << fileInfo.absoluteFilePath();
}
} else {
qWarning() << "无法打开文件进行读取: " << fileInfo.absoluteFilePath();
}
}
#endif
}
2025-03-19 07:19:45 +00:00
void LeftWidget::slotTreeWidgetItemClicked(QTreeWidgetItem *item, int column){
qDebug()<<"item clicked:"<<item->text(0)<<column;
2025-03-10 09:35:07 +00:00
2025-04-14 09:11:01 +00:00
if(Global::Mode::Analysis != Global::_mode){
2025-03-19 07:19:45 +00:00
return;
}
QString fileName;
// 获取父节点
QTreeWidgetItem *parentItem = item->parent();
if (parentItem) {
qDebug() << "parent item text:" << parentItem->text(0);
if(parentItem == _sampleDataItem){
2025-04-15 08:03:00 +00:00
fileName =Global::SampleDataFloder + "/" + item->text(0);
2025-10-20 08:16:12 +00:00
#if 0
2025-03-19 07:19:45 +00:00
}else if(parentItem == _baseLineItem){
2025-04-15 08:03:00 +00:00
fileName =Global::BaseLineFolder + "/" +item->text(0);
2025-10-20 08:16:12 +00:00
#endif
2025-03-19 07:19:45 +00:00
}else if(parentItem == _analysisStateItem){
2025-04-15 08:03:00 +00:00
fileName =Global::AnalysisStateFolder + "/" +item->text(0);
2025-03-19 07:19:45 +00:00
}
} else {
qDebug() << "item has no parent (it is a top-level item)";
return;
}
emit sigSendAnalysisFileName(fileName);
}
2025-03-10 09:35:07 +00:00
void LeftWidget::initFileName(QTreeWidgetItem* parentItem,const QString &folderPath)
{
QDir dir(folderPath);
QStringList files = dir.entryList(QDir::Files);
for(const QString &fileName:files){
QTreeWidgetItem *subItem = new QTreeWidgetItem();
subItem->setText(0,fileName);
// _sampleDataItem->addChild(new QTreeWidgetItem(0,fileName));
parentItem->addChild(subItem);
}
}
void LeftWidget::expandAll(QTreeWidgetItem* item) {
item->setExpanded(true);
for (int i = 0; i < item->childCount(); ++i) {
expandAll(item->child(i));
}
}
2025-04-22 08:59:26 +00:00
void LeftWidget::clearAllChildItems(QTreeWidgetItem *parentItem)
{
int childCount = parentItem->childCount();
for (int i = 0; i < childCount; ++i) {
QTreeWidgetItem* childItem = parentItem->takeChild(0);
delete childItem;
}
}
2025-09-26 08:50:48 +00:00
2025-03-10 09:35:07 +00:00
#if 0
void LeftWidget::recursiveFolderOperation(const QString& folderPath) {
QDir dir(folderPath);
if (!dir.exists()) {
qWarning() << "文件夹不存在: " << folderPath;
return;
}
// 遍历文件
QFileInfoList fileList = dir.entryInfoList(QDir::Files | QDir::NoDotAndDotDot);
for (const QFileInfo& fileInfo : fileList) {
QFile file(fileInfo.absoluteFilePath());
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
QString content = file.readAll();
qDebug() << "读取文件 " << fileInfo.absoluteFilePath() << " 内容: " << content;
file.close();
// 写入文件操作示例:这里简单在文件末尾追加一行内容
if (file.open(QIODevice::Append | QIODevice::Text)) {
file.write("\n这是通过递归写入添加的内容");
qDebug() << "已向文件 " << fileInfo.absoluteFilePath() << " 写入内容";
file.close();
} else {
qWarning() << "无法打开文件进行写入: " << fileInfo.absoluteFilePath();
}
} else {
qWarning() << "无法打开文件进行读取: " << fileInfo.absoluteFilePath();
}
}
// 递归遍历子文件夹
QFileInfoList subDirList = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
for (const QFileInfo& subDirInfo : subDirList) {
recursiveFolderOperation(subDirInfo.absoluteFilePath());
}
}
#endif
2025-09-26 08:50:48 +00:00