From 486a9defc15315f297433f825f801d6643a6878d Mon Sep 17 00:00:00 2001 From: tangchao0503 <735056338@qq.com> Date: Wed, 1 Apr 2026 22:59:12 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=201=E3=80=81=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E9=A1=B5=E9=9D=A23=EF=BC=9B=202=E3=80=81resononNirImager?= =?UTF-8?q?=E7=9A=84bug=E4=BF=AE=E5=A4=8D=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HPPA/AppSettings.cpp | 10 ++++++++ HPPA/AppSettings.h | 3 +++ HPPA/FileNameLineEdit.cpp | 46 ++++++++++++++++++++++++++++++++++++ HPPA/FileNameLineEdit.h | 21 ++++++++++++++++ HPPA/HPPA.cpp | 23 ++++++------------ HPPA/HPPA.h | 6 ++++- HPPA/HPPA.vcxproj | 2 ++ HPPA/HPPA.vcxproj.filters | 6 +++++ HPPA/ImagerOperationBase.cpp | 17 ++++++++++--- HPPA/ImagerOperationBase.h | 3 +++ HPPA/ResononNirImager.cpp | 13 ++++++++-- HPPA/set.ui | 6 ++++- 12 files changed, 133 insertions(+), 23 deletions(-) create mode 100644 HPPA/FileNameLineEdit.cpp create mode 100644 HPPA/FileNameLineEdit.h diff --git a/HPPA/AppSettings.cpp b/HPPA/AppSettings.cpp index c0cb737..d5d8110 100644 --- a/HPPA/AppSettings.cpp +++ b/HPPA/AppSettings.cpp @@ -1,6 +1,7 @@ #include "AppSettings.h" const QString AppSettings::kDefaultDataFolder = QStringLiteral("C:\\HPPA_image"); +const QString AppSettings::kDefaultFileName = QStringLiteral("test_image"); AppSettings::AppSettings() : m_settings(QSettings::IniFormat, QSettings::UserScope, @@ -23,3 +24,12 @@ void AppSettings::setDataFolder(const QString& path) { m_settings.setValue("General/DataFolder", path); } + +QString AppSettings::fileName() const +{ + return m_settings.value("General/FileName", kDefaultFileName).toString(); +} +void AppSettings::setFileName(const QString& path) +{ + m_settings.setValue("General/FileName", path); +} diff --git a/HPPA/AppSettings.h b/HPPA/AppSettings.h index 68d0891..b77b4d2 100644 --- a/HPPA/AppSettings.h +++ b/HPPA/AppSettings.h @@ -12,6 +12,8 @@ public: QString dataFolder() const; void setDataFolder(const QString& path); + QString fileName() const; + void setFileName(const QString& path); // 在此处添加更多参数的 getter/setter ... private: @@ -23,4 +25,5 @@ private: // 默认值 static const QString kDefaultDataFolder; + static const QString kDefaultFileName; }; diff --git a/HPPA/FileNameLineEdit.cpp b/HPPA/FileNameLineEdit.cpp new file mode 100644 index 0000000..5cde11c --- /dev/null +++ b/HPPA/FileNameLineEdit.cpp @@ -0,0 +1,46 @@ +#include "FileNameLineEdit.h" + +FileNameLineEdit::FileNameLineEdit(QWidget* parent) + : QLineEdit(parent) +{ + setText(AppSettings::instance().fileName()); + connect(this, &QLineEdit::textChanged, this, &FileNameLineEdit::onTextChanged); +} + +void FileNameLineEdit::keyPressEvent(QKeyEvent* event) +{ + if (event->key() == Qt::Key_Space) + { + event->ignore(); + return; + } + QLineEdit::keyPressEvent(event); +} + +void FileNameLineEdit::inputMethodEvent(QInputMethodEvent* event) +{ + QString commitString = event->commitString(); + if (commitString.contains(' ')) + { + commitString.remove(' '); + QInputMethodEvent filtered(event->preeditString(), event->attributes()); + filtered.setCommitString(commitString); + QLineEdit::inputMethodEvent(&filtered); + return; + } + QLineEdit::inputMethodEvent(event); +} + +void FileNameLineEdit::onTextChanged(const QString& text) +{ + QString cleaned = text; + if (cleaned.contains(' ')) + { + int pos = cursorPosition(); + cleaned.remove(' '); + setText(cleaned); + setCursorPosition(qMin(pos, cleaned.length())); + return; + } + AppSettings::instance().setFileName(cleaned); +} \ No newline at end of file diff --git a/HPPA/FileNameLineEdit.h b/HPPA/FileNameLineEdit.h new file mode 100644 index 0000000..48ac749 --- /dev/null +++ b/HPPA/FileNameLineEdit.h @@ -0,0 +1,21 @@ +#pragma once + +#include +#include +#include "AppSettings.h" + +class FileNameLineEdit : public QLineEdit +{ + Q_OBJECT + +public: + explicit FileNameLineEdit(QWidget* parent = nullptr); + +protected: + void keyPressEvent(QKeyEvent* event) override; + + void inputMethodEvent(QInputMethodEvent* event) override; + +private slots: + void onTextChanged(const QString& text); +}; diff --git a/HPPA/HPPA.cpp b/HPPA/HPPA.cpp index 18ada9a..08feac2 100644 --- a/HPPA/HPPA.cpp +++ b/HPPA/HPPA.cpp @@ -630,10 +630,8 @@ void HPPA::initMenubarToolbar() QAction* action = ui.mainToolBar->insertWidget(ui.action_start_recording, frame_number); frame_number->setEnabled(false); - m_FilenameLineEdit = new QLineEdit(ui.mainToolBar); - m_FilenameLineEdit->setStyleSheet("QLineEdit{background-color:rgb(255,255,255);}"); + m_FilenameLineEdit = new FileNameLineEdit(ui.mainToolBar); m_FilenameLineEdit->setMaximumWidth(100); - m_FilenameLineEdit->setText("tmp_image"); m_FilenameLineEdit->setStyleSheet(R"( QLineEdit { background-color: #142D7F; @@ -1267,10 +1265,7 @@ void HPPA::onStartRecordStep1() } //判断是否覆盖存在的文件 - FileOperation* fileOperation = new FileOperation(); - string directory = fileOperation->getDirectoryFromString(); - //string imgPath = directory + "\\tmp_image"; - string imgPath = directory + "\\" + m_FilenameLineEdit->text().toStdString(); + string imgPath = (AppSettings::instance().dataFolder() + QDir::separator() + AppSettings::instance().fileName()).toStdString(); string x_location = removeFileExtension(imgPath) + "_x_location.pos"; m_RecordState += 1; @@ -1309,8 +1304,7 @@ void HPPA::onStartRecordStep1() //m_imageViewerTabWidget->clear(); removeAllLayersInRasterGroup(); - m_Imager->setFileName2Save(imgPath); - m_Imager->setFrameNumber(this->frame_number->text().toInt()); + emit updateRecordingFileInfoSignal(AppSettings::instance().dataFolder(), AppSettings::instance().fileName(), this->frame_number->text().toInt()); emit StartRecordSignal();//发射开始采集信号 ui.action_start_recording->setText(QString::fromLocal8Bit("停止采集")); @@ -1342,8 +1336,7 @@ void HPPA::onStartRecordStep1() //ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(255,0,0);}"); //应该先控制马达运动,当马达运动后,再开始光谱仪采集(发射开始采集信号) - m_Imager->setFileName2Save(imgPath); - m_Imager->setFrameNumber(this->frame_number->text().toInt()); + emit updateRecordingFileInfoSignal(AppSettings::instance().dataFolder(), AppSettings::instance().fileName(), this->frame_number->text().toInt()); m_omc->setImager(m_Imager); m_omc->run(); } @@ -1367,8 +1360,7 @@ void HPPA::onStartRecordStep1() //m_imageViewerTabWidget->clear(); removeAllLayersInRasterGroup(); - m_Imager->setFileName2Save(imgPath); - m_Imager->setFrameNumber(this->frame_number->text().toInt()); + emit updateRecordingFileInfoSignal(AppSettings::instance().dataFolder(), AppSettings::instance().fileName(), this->frame_number->text().toInt()); m_tmc->setImager(m_Imager); m_tmc->setPosFileName(QString::fromStdString(x_location)); m_tmc->run(); @@ -1393,8 +1385,7 @@ void HPPA::onStartRecordStep1() else if (checkedName == "mAction_RobotArm") { //先判断是否选择了任务,执行函数RobotArmControl::executeTask,修复界面显示bug - m_Imager->setFileName2Save(imgPath); - m_Imager->setFrameNumber(this->frame_number->text().toInt()); + emit updateRecordingFileInfoSignal(AppSettings::instance().dataFolder(), AppSettings::instance().fileName(), this->frame_number->text().toInt()); m_rac->executeTaskWithHyperImager(); return; @@ -1797,7 +1788,6 @@ void HPPA::onconnect() connect(m_Imager, &ImagerOperationBase::autoExposureSignal, this, &HPPA::autoExposureFinished); m_Imager->connect_imager(frame_number->text().toInt()); - m_Imager->setFileName2Save(m_FilenameLineEdit->text().toStdString()); //文件拷贝 m_CopyFileThread = new QThread(); @@ -1819,6 +1809,7 @@ void HPPA::onconnect() connect(this->ui.action_start_recording, SIGNAL(triggered()), this, SLOT(onStartRecordStep1())); connect(this, SIGNAL(StartRecordSignal()), m_Imager, SLOT(start_record())); + connect(this, &HPPA::updateRecordingFileInfoSignal, m_Imager, &ImagerOperationBase::updateRecordingFileInfo); connect(this, SIGNAL(RecordWhiteSignal()), m_Imager, SLOT(record_white())); connect(this, SIGNAL(RecordDarlSignal()), m_Imager, SLOT(record_dark())); connect(m_Imager, SIGNAL(RecordWhiteFinishSignal()), this, SLOT(recordWhiteFinish())); diff --git a/HPPA/HPPA.h b/HPPA/HPPA.h index 395b4c0..2cbff10 100644 --- a/HPPA/HPPA.h +++ b/HPPA/HPPA.h @@ -74,6 +74,8 @@ #include "recordFrameCounter.h" #include "setWindow.h" +#include "AppSettings.h" +#include "FileNameLineEdit.h" #define PI 3.1415926 @@ -208,7 +210,7 @@ private: QWidget* tmp(QWidget* a); QLineEdit * frame_number; - QLineEdit * m_FilenameLineEdit; + FileNameLineEdit * m_FilenameLineEdit; QLabel * xmotor_state_label1; QLabel * ymotor_state_label1; @@ -373,4 +375,6 @@ signals: void RecordWhiteSignal(); void RecordDarlSignal(); + + void updateRecordingFileInfoSignal(const QString& filePath, const QString& baseName, int frameNumber); }; diff --git a/HPPA/HPPA.vcxproj b/HPPA/HPPA.vcxproj index 6c532eb..db3e56d 100644 --- a/HPPA/HPPA.vcxproj +++ b/HPPA/HPPA.vcxproj @@ -114,6 +114,7 @@ + @@ -206,6 +207,7 @@ + diff --git a/HPPA/HPPA.vcxproj.filters b/HPPA/HPPA.vcxproj.filters index 3d53621..719142f 100644 --- a/HPPA/HPPA.vcxproj.filters +++ b/HPPA/HPPA.vcxproj.filters @@ -205,6 +205,9 @@ Source Files + + Source Files + @@ -333,6 +336,9 @@ Header Files + + Header Files + diff --git a/HPPA/ImagerOperationBase.cpp b/HPPA/ImagerOperationBase.cpp index 2b6e6d9..4d48df9 100644 --- a/HPPA/ImagerOperationBase.cpp +++ b/HPPA/ImagerOperationBase.cpp @@ -1,4 +1,5 @@ #include "ImagerOperationBase.h" +#include ImagerOperationBase::ImagerOperationBase() { @@ -250,6 +251,7 @@ void ImagerOperationBase::start_record() string timesFile = removeFileExtension(m_FileName2Save2) + ".times"; FILE* hTimesFile = fopen(timesFile.c_str(), "w+"); + imagerStartCollect(); while (m_bRecordControlState) { @@ -257,7 +259,8 @@ void ImagerOperationBase::start_record() getFrame(buffer); long long timeOs = getNanosecondsSinceMidnight(); - + //qDebug() << "time ns-------------------: " << timeOs; + //减去暗电流,应为buffer和dark都是unsigned short,所以当dark>buffer时,buffer-dark=65535 if (m_HasDark) { @@ -297,7 +300,7 @@ void ImagerOperationBase::start_record() } x = fwrite(buffer, 2, m_FrameSize, m_fImage); - fprintf(hTimesFile, "%d\n", timeOs); + fprintf(hTimesFile, "%ll\n", timeOs); //将rgb波段提取出来,以便在界面中显示 m_RgbImage->FillRgbImage(buffer);//?????????????????????????????????????????????????????????????????????????????????????????????????????? @@ -320,7 +323,7 @@ void ImagerOperationBase::start_record() //在最后一次画图前需要进行一次拉伸 //m_RgbImage - emit PlotSignal(m_FileSavedCounter, -1, filePath); + emit PlotSignal(m_FileSavedCounter, -1, filePath);//采集完成后进行一次画图,以防采集帧数不是帧率的倍数时,画图不全 m_bRecordControlState = false; WriteHdr(); @@ -357,6 +360,14 @@ void ImagerOperationBase::setFileName2Save(string FileName) m_FileSavedCounter = 0; } +void ImagerOperationBase::updateRecordingFileInfo(const QString& filePath, const QString& baseName, int frameNumber) +{ + m_FileName2Save = (filePath + QDir::separator() + baseName).toStdString(); + m_FileSavedCounter = 0; + + setFrameNumber(frameNumber); +} + void ImagerOperationBase::setFocusControlState(bool FocusControlState) { m_bFocusControlState = FocusControlState; diff --git a/HPPA/ImagerOperationBase.h b/HPPA/ImagerOperationBase.h index ea9054d..b6e16fa 100644 --- a/HPPA/ImagerOperationBase.h +++ b/HPPA/ImagerOperationBase.h @@ -101,6 +101,9 @@ public slots: virtual void record_white(); void getFocusIndexSobel(); + + void updateRecordingFileInfo(const QString& filePath, const QString& baseName, int frameNumber); + signals: void PlotSignal(int, int, QString);//绘制影像信号,第一个参数:第几个影像;第二个参数:采集到的帧数,-1代表此次采集的最后一次绘制 void RecordFinishedSignal_WhenFrameNumberMeet();//采集完成信号:需要采集的总帧数(m_iFrameNumber)采集完成 diff --git a/HPPA/ResononNirImager.cpp b/HPPA/ResononNirImager.cpp index 32332ea..e5d30a6 100644 --- a/HPPA/ResononNirImager.cpp +++ b/HPPA/ResononNirImager.cpp @@ -285,8 +285,13 @@ void ResononNirImager::start_record() exit(EXIT_FAILURE); } + // ڿʼɼʱļϢUI д MapLayer + // prepare file name that will be used for saving m_FileName2Save2 = m_FileName2Save + "_" + std::to_string(m_FileSavedCounter) + ".bil"; + QString baseName = QString::fromStdString(getFileNameFromPath(m_FileName2Save2)); QString filePath = QString::fromStdString(m_FileName2Save2); + emit LayerFileCreated(baseName, filePath, m_FileSavedCounter); + FILE* m_fImage = fopen(m_FileName2Save2.c_str(), "w+b"); size_t x; @@ -344,7 +349,7 @@ void ResononNirImager::start_record() } x = fwrite(buffer, 2, m_FrameSize, m_fImage); - fprintf(hTimesFile, "%lld\n", timeOs); + fprintf(hTimesFile, "%ll\n", timeOs); //rgbȡԱڽʾ m_RgbImage->FillRgbImage(buffer);//?????????????????????????????????????????????????????????????????????????????????????????????????????? @@ -360,7 +365,6 @@ void ResononNirImager::start_record() if (m_iFrameCounter >= m_iFrameNumber) { break; - //qDebug() << "ֹͣɼ֡Ƶ"; } } @@ -372,6 +376,11 @@ void ResononNirImager::start_record() m_bRecordControlState = false; WriteHdr(); + + // ImageFileSaved źţ֪ͨ UI Ѹļͼ + // m_FileName2Save2 ˱д .bil ļ "tmp_image_0.bil" + emit ImageFileSaved(QString::fromStdString(m_FileName2Save2), m_FileSavedCounter); + m_FileSavedCounter++; if (m_iFrameCounter >= m_iFrameNumber) diff --git a/HPPA/set.ui b/HPPA/set.ui index 93f8510..012d2d1 100644 --- a/HPPA/set.ui +++ b/HPPA/set.ui @@ -243,7 +243,11 @@ QPushButton:pressed - + + + true + +