添加测量分析项目保存和打开加载
This commit is contained in:
parent
017d77ed84
commit
324c29cbbc
|
|
@ -121,7 +121,7 @@ bool EveryChannelParticleDataSeparateTask::processEveryChannelParticleData()
|
|||
|
||||
// 板卡和通道号计算,通道号 = 板卡号 * 4 + 通道号
|
||||
int channel_num = (board_id) * 4 + (channel_id + 1);
|
||||
QString particle_data_filename = result_data_output_dir.filePath(QString("ParticleData_ch_%1.csv").arg(channel_num));
|
||||
QString particle_data_filename = result_data_output_dir.filePath(QStringLiteral(u"通道%1粒子数据.csv").arg(channel_num));
|
||||
if (!particle_data_filename_list.contains(channel_num)) {
|
||||
particle_data_filename_list.insert(channel_num, particle_data_filename);
|
||||
}
|
||||
|
|
@ -201,7 +201,7 @@ bool EveryChannelParticleCountDataTask::processEveryChannelParticleData()
|
|||
|
||||
const QString& all_channel_particle_data_filename = GetAllChannelParticleDataFilename();
|
||||
QMap<uint, QString> particle_count_filename_list;
|
||||
QString all_channel_total_count_filename;
|
||||
// QString all_channel_total_count_filename;
|
||||
|
||||
try {
|
||||
// 统计每个通道的粒子计数(相同板卡号通道号相同道址)
|
||||
|
|
@ -248,7 +248,7 @@ bool EveryChannelParticleCountDataTask::processEveryChannelParticleData()
|
|||
// 预创建所有通道的文件流
|
||||
for (auto channel_it = channel_address_counts.begin(); channel_it != channel_address_counts.end(); ++channel_it) {
|
||||
uint channel_num = channel_it.key();
|
||||
QString count_data_filename = every_ch_count_output_dir.filePath(QString("ParticleCountData_ch_%1.csv").arg(channel_num));
|
||||
QString count_data_filename = every_ch_count_output_dir.filePath(QStringLiteral(u"通道%1粒子计数.csv").arg(channel_num));
|
||||
particle_count_filename_list.insert(channel_num, count_data_filename);
|
||||
|
||||
// 创建文件流
|
||||
|
|
@ -492,7 +492,7 @@ bool ParticleDataSortTask::processEveryChannelParticleData()
|
|||
sorted_result_output_dir.mkpath(sorted_result_dir);
|
||||
|
||||
const QString& all_channel_particle_data_filename = GetAllChannelParticleDataFilename();
|
||||
QString sorted_output_filename = sorted_result_output_dir.filePath("SortedParticleData.csv");
|
||||
QString sorted_output_filename = sorted_result_output_dir.filePath(QStringLiteral(u"粒子数据[已排序].csv"));
|
||||
|
||||
try {
|
||||
const size_t CHUNK_SIZE = 100 * 1024 * 1024; // 100MB chunks
|
||||
|
|
|
|||
|
|
@ -9,13 +9,13 @@
|
|||
#include <QMenu>
|
||||
#include <QPlainTextEdit>
|
||||
#include <QScrollBar>
|
||||
|
||||
#include <QFileDialog>
|
||||
#include <QMessageBox>
|
||||
#include "DockAreaWidget.h"
|
||||
#include "DockComponentsFactory.h"
|
||||
#include "DockManager.h"
|
||||
#include "DockWidget.h"
|
||||
#include "FloatingDockContainer.h"
|
||||
|
||||
#include "AboutDlg.h"
|
||||
#include "DataProcessWorkPool.h"
|
||||
#include "EneryScaleForm.h"
|
||||
|
|
@ -25,6 +25,7 @@
|
|||
#include "NewMeasureAnalysisDlg.h"
|
||||
#include "MeasureAnalysisView.h"
|
||||
#include "MeasureAnalysisTreeView.h"
|
||||
#include "GlobalDefine.h"
|
||||
|
||||
using namespace ads;
|
||||
|
||||
|
|
@ -170,8 +171,42 @@ void MainWindow::initAction()
|
|||
}
|
||||
}
|
||||
};
|
||||
|
||||
connect(ui->action_new_measurement_analysis, &QAction::triggered, this, new_measurement_analysis_handler);
|
||||
connect(ui->action_open_measurement_analysis, &QAction::triggered, this, [this](){
|
||||
const QString& filename = QFileDialog::getOpenFileName(this, QStringLiteral(u"选择测量分析项目文件"), QString(), QStringLiteral(u"测量分析项目 (*.msproject)"));
|
||||
if (filename.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
QFileInfo file_info(filename);
|
||||
if (file_info.size() == 0) {
|
||||
QMessageBox::warning(this, QStringLiteral(u"警告"), QStringLiteral(u"选择的测量分析项目文件为空文件!"));
|
||||
return;
|
||||
}
|
||||
MeasureAnalysisProjectModel* model = new MeasureAnalysisProjectModel;
|
||||
if (model->LoadProjectModel(filename)) {
|
||||
ProjectList::Instance()->AddProjectModel(model);
|
||||
}
|
||||
|
||||
});
|
||||
connect(ui->action_save_measurement_analysis, &QAction::triggered, this, [](){
|
||||
MeasureAnalysisProjectModel* project_model = ProjectList::Instance()->GetCurrentProjectModel();
|
||||
if (project_model) {
|
||||
const QString& project_name = project_model->GetProjectName();
|
||||
if ( project_model->SaveProjectModel() ){
|
||||
const QString& info_text = QStringLiteral(u"保存测量分析项目\"%1\"完成.").arg(project_name);
|
||||
LOG_INFO(info_text);
|
||||
} else {
|
||||
const QString& warn_text = QStringLiteral(u"保存测量分析项目\"%1\"失败!").arg(project_name);
|
||||
LOG_WARN(warn_text);
|
||||
}
|
||||
}
|
||||
});
|
||||
connect(ui->action_close_measurement_analysis, &QAction::triggered, this, [](){
|
||||
MeasureAnalysisProjectModel* project_model = ProjectList::Instance()->GetCurrentProjectModel();
|
||||
if (project_model) {
|
||||
|
||||
}
|
||||
});
|
||||
connect(ui->action_manage_measurement_analysis, &QAction::triggered, this->_action_central_dock_widget, &QAction::triggered);
|
||||
connect(ui->action_device_config_mrg, &QAction::triggered, this, []() {
|
||||
QDialog device_cfg_mrg_dlg;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,11 @@
|
|||
#include "MeasureAnalysisProjectModel.h"
|
||||
#include "AnalysisTypeDefine.h"
|
||||
#include "GlobalDefine.h"
|
||||
#include <QFile>
|
||||
#include <QDir>
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonObject>
|
||||
|
||||
|
||||
void MeasureAnalysisProjectModel::SetProjectDir(const QString& project_dir)
|
||||
{
|
||||
|
|
@ -84,7 +89,7 @@ void MeasureAnalysisProjectModel::SetChannelAddressCountDataFilename(uint channe
|
|||
|
||||
void MeasureAnalysisProjectModel::SetChannelEneryCountDataFilename(uint channel, const QString& filename)
|
||||
{
|
||||
this->_channel_every_count_data_filename_list[channel] = filename;
|
||||
this->_channel_enery_count_data_filename_list[channel] = filename;
|
||||
}
|
||||
|
||||
void MeasureAnalysisProjectModel::SetAllChannelEneryTotalCountDataFilename(const QString& filename)
|
||||
|
|
@ -193,14 +198,14 @@ const QString& MeasureAnalysisProjectModel::GetChannelAddressCountDataFilename(u
|
|||
|
||||
const QMap<uint, QString>& MeasureAnalysisProjectModel::GetChannelEneryCountDataFilenameList() const
|
||||
{
|
||||
return this->_channel_every_count_data_filename_list;
|
||||
return this->_channel_enery_count_data_filename_list;
|
||||
}
|
||||
|
||||
const QString& MeasureAnalysisProjectModel::GetChannelEneryCountDataFilename(uint channel) const
|
||||
{
|
||||
QString file_name;
|
||||
if ( this->_channel_every_count_data_filename_list.contains(channel) ) {
|
||||
file_name = this->_channel_every_count_data_filename_list[channel];
|
||||
if ( this->_channel_enery_count_data_filename_list.contains(channel) ) {
|
||||
file_name = this->_channel_enery_count_data_filename_list[channel];
|
||||
}
|
||||
return file_name;
|
||||
}
|
||||
|
|
@ -219,6 +224,189 @@ const QMap<uint, QString>& MeasureAnalysisProjectModel::GetTimeWinConformParticl
|
|||
return conform_particle_data;
|
||||
}
|
||||
|
||||
bool MeasureAnalysisProjectModel::LoadProjectModel(const QString& project_filename)
|
||||
{
|
||||
this->_project_filename = project_filename;
|
||||
// 从json文件加载项目模型
|
||||
QFile json_file(this->_project_filename);
|
||||
if (!json_file.open(QIODevice::ReadOnly | QIODevice::Text))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
QJsonDocument json_doc = QJsonDocument::fromJson(json_file.readAll());
|
||||
json_file.close();
|
||||
if (json_doc.isNull())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!json_doc.isObject())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
QJsonObject json_obj = json_doc.object();
|
||||
if (!json_obj.contains("ProjectName"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
this->_project_name = json_obj["ProjectName"].toString();
|
||||
if (!json_obj.contains("SpectrumType"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
this->_spec_type = (SpectrumType)json_obj["SpectrumType"].toInt();
|
||||
if (!json_obj.contains("IsStandardSource"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
this->_is_std_source = json_obj["IsStandardSource"].toBool();
|
||||
if (!json_obj.contains("DescriptionInfo"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
this->_description_info = json_obj["DescriptionInfo"].toString();
|
||||
if (!json_obj.contains("MeasurePresetTime"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
this->_measure_preset_time = json_obj["MeasurePresetTime"].toInt();
|
||||
if (!json_obj.contains("IsMeasureComplete"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
this->_is_measure_complete = json_obj["IsMeasureComplete"].toBool();
|
||||
if (!json_obj.contains("ConformTimeWin"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
this->_conform_time_win = json_obj["ConformTimeWin"].toInt();
|
||||
|
||||
QFileInfo project_fileinfo(project_filename);
|
||||
this->_project_dir = project_fileinfo.absoluteDir().absolutePath();
|
||||
|
||||
auto ProjectAbsFilename = [this](const QString& project_relative_filename){
|
||||
QString project_abs_filename;
|
||||
if ( !project_relative_filename.isEmpty() ) {
|
||||
QDir project_dir(this->_project_dir);
|
||||
project_abs_filename = project_dir.filePath(project_relative_filename);
|
||||
QFileInfo file_info(project_abs_filename);
|
||||
if ( !file_info.exists() ) {
|
||||
project_abs_filename.clear();
|
||||
}
|
||||
}
|
||||
return project_abs_filename;
|
||||
};
|
||||
|
||||
this->_measure_device_params_cfg_filename = ProjectAbsFilename(json_obj["MeasureDeviceParamsCfgFilename"].toString());
|
||||
this->_enery_scale_filename = ProjectAbsFilename(json_obj["EneryScaleFilename"].toString());
|
||||
this->_efficiency_scale_filename = ProjectAbsFilename(json_obj["EfficiencyScaleFilename"].toString());
|
||||
|
||||
this->_all_channel_particle_data_filename = ProjectAbsFilename(json_obj["AllChannelParticleDataFilename"].toString());
|
||||
this->_sorted_particle_data_filename = ProjectAbsFilename(json_obj["SortedParticleDataFilename"].toString());
|
||||
|
||||
const auto& address_count_data_filename_list = json_obj["ChannelAddressCountDataFilenameList"].toObject().toVariantMap();
|
||||
for (auto it = address_count_data_filename_list.constBegin(); it!=address_count_data_filename_list.constEnd(); ++it) {
|
||||
uint channel_num = it.key().toUInt();
|
||||
this->_channel_address_count_data_filename_list[channel_num] = ProjectAbsFilename(it.value().toString());
|
||||
}
|
||||
|
||||
const auto& enery_count_data_filename_list = json_obj["ChannelEneryCountDataFilenameList"].toObject().toVariantMap();
|
||||
for (auto it = enery_count_data_filename_list.constBegin(); it!=enery_count_data_filename_list.constEnd(); ++it) {
|
||||
uint channel_num = it.key().toUInt();
|
||||
this->_channel_enery_count_data_filename_list[channel_num] = ProjectAbsFilename(it.value().toString());
|
||||
}
|
||||
|
||||
this->_all_channel_enery_total_count_data_filename = ProjectAbsFilename(json_obj["AllChannelEneryTotalCountDataFilename"].toString());
|
||||
|
||||
const auto& time_win_conform_particle_data = json_obj["TimeWinConformParticleData"].toObject().toVariantMap();
|
||||
for (auto it = time_win_conform_particle_data.constBegin(); it!=time_win_conform_particle_data.constEnd(); ++it) {
|
||||
uint time_win = it.key().toUInt();
|
||||
QMap<uint, QString> conform_particle_data;
|
||||
// const auto& conform_particle_data_list = it.value().toObject().toVariantMap();
|
||||
// for (auto it2 = conform_particle_data_list.constBegin(); it2!=conform_particle_data_list.constEnd(); ++it2) {
|
||||
// uint particle_count = it2.key().toUInt();
|
||||
// conform_particle_data[particle_count] = ProjectAbsFilename(it2.value().toString());
|
||||
// }
|
||||
this->_time_win_conform_particle_data[time_win] = conform_particle_data;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MeasureAnalysisProjectModel::SaveProjectModel()
|
||||
{
|
||||
auto ProjectRelativeFilename = [this](const QString& abs_filename){
|
||||
QString project_relative_filename;
|
||||
if ( !abs_filename.isEmpty() ) {
|
||||
QFileInfo file_info(abs_filename);
|
||||
if ( file_info.exists() ) {
|
||||
QDir project_dir(_project_dir);
|
||||
QString project_dir_path = project_dir.absolutePath() + "/";
|
||||
QString project_abs_filename = file_info.absoluteFilePath();
|
||||
project_relative_filename = project_abs_filename.remove(project_dir_path);
|
||||
}
|
||||
}
|
||||
return project_relative_filename;
|
||||
};
|
||||
|
||||
if (this->_project_filename.isEmpty())
|
||||
{
|
||||
this->_project_filename = QDir(this->_project_dir).filePath(this->_project_name + QString(".msproject"));;
|
||||
}
|
||||
// 将项目模型转换为json对象
|
||||
QVariantMap project_json_obj_map;
|
||||
project_json_obj_map["ProjectName"] = this->_project_name;
|
||||
project_json_obj_map["SpectrumType"] = this->_spec_type;
|
||||
project_json_obj_map["IsStandardSource"] = this->_is_std_source;
|
||||
project_json_obj_map["DescriptionInfo"] = this->_description_info;
|
||||
project_json_obj_map["MeasurePresetTime"] = int(this->_measure_preset_time);
|
||||
project_json_obj_map["IsMeasureComplete"] = this->_is_measure_complete;
|
||||
project_json_obj_map["ConformTimeWin"] = this->_conform_time_win;
|
||||
|
||||
project_json_obj_map["MeasureDeviceParamsCfgFilename"] = ProjectRelativeFilename(this->_measure_device_params_cfg_filename);
|
||||
project_json_obj_map["EneryScaleFilename"] = ProjectRelativeFilename(this->_enery_scale_filename);
|
||||
project_json_obj_map["EfficiencyScaleFilename"] = ProjectRelativeFilename(this->_efficiency_scale_filename);
|
||||
|
||||
project_json_obj_map["AllChannelParticleDataFilename"] = ProjectRelativeFilename(this->_all_channel_particle_data_filename);
|
||||
project_json_obj_map["SortedParticleDataFilename"] = ProjectRelativeFilename(this->_sorted_particle_data_filename);
|
||||
|
||||
QVariantMap channel_address_count_data_filename_list;
|
||||
for (auto it = this->_channel_address_count_data_filename_list.constBegin(); it != this->_channel_address_count_data_filename_list.constEnd(); ++it) {
|
||||
channel_address_count_data_filename_list[QString::number(it.key())] = ProjectRelativeFilename(it.value());
|
||||
}
|
||||
project_json_obj_map["ChannelAddressCountDataFilenameList"] = channel_address_count_data_filename_list;
|
||||
|
||||
QVariantMap channel_enery_count_data_filename_list;
|
||||
for (auto it = this->_channel_enery_count_data_filename_list.constBegin(); it != this->_channel_enery_count_data_filename_list.constEnd(); ++it) {
|
||||
channel_enery_count_data_filename_list[QString::number(it.key())] = ProjectRelativeFilename(it.value());
|
||||
}
|
||||
project_json_obj_map["ChannelEneryCountDataFilenameList"] = channel_enery_count_data_filename_list;
|
||||
|
||||
project_json_obj_map["AllChannelEneryTotalCountDataFilename"] = ProjectRelativeFilename(this->_all_channel_enery_total_count_data_filename);
|
||||
|
||||
QVariantMap time_win_conform_particle_data;
|
||||
for (auto it = this->_time_win_conform_particle_data.constBegin(); it != this->_time_win_conform_particle_data.constEnd(); ++it) {
|
||||
QVariantMap conform_particle_data;
|
||||
for (auto it2 = it.value().constBegin(); it2 != it.value().constEnd(); ++it2) {
|
||||
conform_particle_data[QString::number(it2.key())] = ProjectRelativeFilename(it2.value());
|
||||
}
|
||||
time_win_conform_particle_data[QString::number(it.key())] = conform_particle_data;
|
||||
}
|
||||
project_json_obj_map["TimeWinConformParticleData"] = time_win_conform_particle_data;
|
||||
|
||||
// 将项目模型保存到json文件
|
||||
QJsonDocument json_doc = QJsonDocument::fromVariant(project_json_obj_map);
|
||||
QFile json_file(this->_project_filename);
|
||||
if (!json_file.open(QIODevice::WriteOnly | QIODevice::Text))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
json_file.write(json_doc.toJson());
|
||||
json_file.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
/* MeasureAnalysisProjectModelList */
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -271,6 +459,17 @@ void MeasureAnalysisProjectModelList::SetCurrentProjectModel(const QString& proj
|
|||
{
|
||||
if (_project_models.contains(project_name)) {
|
||||
_current_project_model = _project_models[project_name];
|
||||
|
||||
for (auto it = _project_node_items.constBegin(); it!=_project_node_items.constEnd(); ++it) {
|
||||
QStandardItem* project_item = it.value();
|
||||
QFont font = project_item->font();
|
||||
if ( it.key() == project_name ) {
|
||||
font.setBold(true);
|
||||
} else {
|
||||
font.setBold(false);
|
||||
}
|
||||
project_item->setFont(font);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -422,6 +621,7 @@ void MeasureAnalysisProjectModelList::intiProjectNodeStruce()
|
|||
QVariant analys_type = QVariant::fromValue(AnalysisType::Project);
|
||||
QStandardItem* project_item = AddChildNode(root_item, project_name, status, analys_type, false);
|
||||
project_item->setData(project_name, ProjectName);
|
||||
node_map[project_name] = project_item;
|
||||
|
||||
// 测量控制
|
||||
QString item_name = QStringLiteral(u"测量控制");
|
||||
|
|
@ -467,10 +667,21 @@ void MeasureAnalysisProjectModelList::intiProjectNodeStruce()
|
|||
node_map[item_name] = node_item;
|
||||
|
||||
item_name = QStringLiteral(u"道址计数");
|
||||
status = cur_pro_model->GetChannelAddressCountDataFilenameList().isEmpty() ? QStringLiteral(u"无效") : QStringLiteral(u"有效");
|
||||
const auto& ch_addr_count_data_filename_list = cur_pro_model->GetChannelAddressCountDataFilenameList();
|
||||
status = ch_addr_count_data_filename_list.isEmpty() ? QStringLiteral(u"无效") : QStringLiteral(u"有效");
|
||||
node_item = AddChildNode(analysis_data_item, item_name, status, QVariant(), true);
|
||||
node_item->setData(project_name, ProjectName);
|
||||
node_map[item_name] = node_item;
|
||||
QStandardItem* adrr_count_item = node_item;
|
||||
for (auto it = ch_addr_count_data_filename_list.begin(); it != ch_addr_count_data_filename_list.end(); ++it) {
|
||||
uint ch_num = it.key();
|
||||
QString item_name = QStringLiteral(u"通道%1道址计数").arg(ch_num);
|
||||
const QVariant& analys_type = QVariant::fromValue(AnalysisType::AddressCountData);
|
||||
QStandardItem* node_item = AddChildNode(adrr_count_item, item_name, status, analys_type, true);
|
||||
node_item->setData(project_name, ProjectName);
|
||||
node_item->setData(ch_num, ChannelNum);
|
||||
node_map[item_name] = node_item;
|
||||
}
|
||||
|
||||
item_name = QStringLiteral(u"能量计数");
|
||||
status = cur_pro_model->GetAllChannelEneryTotalCountDataFilename().isEmpty() ? QStringLiteral(u"无效") : QStringLiteral(u"有效");
|
||||
|
|
@ -478,6 +689,17 @@ void MeasureAnalysisProjectModelList::intiProjectNodeStruce()
|
|||
node_item = AddChildNode(analysis_data_item, item_name, status, analys_type, true);
|
||||
node_item->setData(project_name, ProjectName);
|
||||
node_map[item_name] = node_item;
|
||||
QStandardItem* enery_count_item = node_item;
|
||||
const auto& ch_enery_count_data_filename_list = cur_pro_model->GetChannelEneryCountDataFilenameList();
|
||||
for (auto it = ch_enery_count_data_filename_list.begin(); it != ch_enery_count_data_filename_list.end(); ++it) {
|
||||
uint ch_num = it.key();
|
||||
QString item_name = QStringLiteral(u"通道%1能量计数").arg(ch_num);
|
||||
const QVariant& analys_type = QVariant::fromValue(AnalysisType::EnergyCountData);
|
||||
QStandardItem* node_item = AddChildNode(enery_count_item, item_name, status, analys_type, true);
|
||||
node_item->setData(project_name, ProjectName);
|
||||
node_item->setData(ch_num, ChannelNum);
|
||||
node_map[item_name] = node_item;
|
||||
}
|
||||
|
||||
uint conform_time_win = cur_pro_model->GetConformTimeWin();
|
||||
status = cur_pro_model->GetTimeWinConformParticleDataFilenameList(conform_time_win).isEmpty() ? QStringLiteral(u"无效") : QStringLiteral(u"有效");
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
class MeasureAnalysisProjectModel
|
||||
{
|
||||
public:
|
||||
enum class SpectrumType {
|
||||
enum SpectrumType {
|
||||
None,
|
||||
Sample, // 样品谱
|
||||
Background, // 本底谱
|
||||
|
|
@ -90,11 +90,17 @@ private:
|
|||
QMap<uint, QString> _channel_address_count_data_filename_list;
|
||||
// QString _all_channel_particle_total_count_data_filename;
|
||||
|
||||
QMap<uint, QString> _channel_every_count_data_filename_list;
|
||||
QMap<uint, QString> _channel_enery_count_data_filename_list;
|
||||
QString _all_channel_enery_total_count_data_filename;
|
||||
|
||||
QMap<uint, QMap<uint, QString> > _time_win_conform_particle_data;
|
||||
|
||||
public:
|
||||
bool LoadProjectModel(const QString& project_filename);
|
||||
bool SaveProjectModel();
|
||||
private:
|
||||
QString _project_filename;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ void NewMeasureAnalysisDlg::initialization()
|
|||
});
|
||||
|
||||
connect(ui->btn_filename, &QPushButton::clicked, this, [this](){
|
||||
const QString& filename = QFileDialog::getOpenFileName(this, QStringLiteral(u"选择粒子数据文件"), QString(), QStringLiteral(u"粒子数据文件 (*.csv)"));
|
||||
const QString& filename = QFileDialog::getOpenFileName(this, QStringLiteral(u"选择粒子数据文件"), QString(), QStringLiteral(u"CSV (*.csv);;GVF (*.gvf)"));
|
||||
if (filename.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user