1、配置页面3;
2、resononNirImager的bug修复;
This commit is contained in:
tangchao0503
2026-04-01 22:59:12 +08:00
parent ea1a666619
commit 486a9defc1
12 changed files with 133 additions and 23 deletions

View File

@ -1,6 +1,7 @@
#include "AppSettings.h" #include "AppSettings.h"
const QString AppSettings::kDefaultDataFolder = QStringLiteral("C:\\HPPA_image"); const QString AppSettings::kDefaultDataFolder = QStringLiteral("C:\\HPPA_image");
const QString AppSettings::kDefaultFileName = QStringLiteral("test_image");
AppSettings::AppSettings() AppSettings::AppSettings()
: m_settings(QSettings::IniFormat, QSettings::UserScope, : m_settings(QSettings::IniFormat, QSettings::UserScope,
@ -23,3 +24,12 @@ void AppSettings::setDataFolder(const QString& path)
{ {
m_settings.setValue("General/DataFolder", 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);
}

View File

@ -12,6 +12,8 @@ public:
QString dataFolder() const; QString dataFolder() const;
void setDataFolder(const QString& path); void setDataFolder(const QString& path);
QString fileName() const;
void setFileName(const QString& path);
// 在此处添加更多参数的 getter/setter ... // 在此处添加更多参数的 getter/setter ...
private: private:
@ -23,4 +25,5 @@ private:
// 默认值 // 默认值
static const QString kDefaultDataFolder; static const QString kDefaultDataFolder;
static const QString kDefaultFileName;
}; };

46
HPPA/FileNameLineEdit.cpp Normal file
View File

@ -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);
}

21
HPPA/FileNameLineEdit.h Normal file
View File

@ -0,0 +1,21 @@
#pragma once
#include <QLineEdit>
#include <QKeyEvent>
#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);
};

View File

@ -630,10 +630,8 @@ void HPPA::initMenubarToolbar()
QAction* action = ui.mainToolBar->insertWidget(ui.action_start_recording, frame_number); QAction* action = ui.mainToolBar->insertWidget(ui.action_start_recording, frame_number);
frame_number->setEnabled(false); frame_number->setEnabled(false);
m_FilenameLineEdit = new QLineEdit(ui.mainToolBar); m_FilenameLineEdit = new FileNameLineEdit(ui.mainToolBar);
m_FilenameLineEdit->setStyleSheet("QLineEdit{background-color:rgb(255,255,255);}");
m_FilenameLineEdit->setMaximumWidth(100); m_FilenameLineEdit->setMaximumWidth(100);
m_FilenameLineEdit->setText("tmp_image");
m_FilenameLineEdit->setStyleSheet(R"( m_FilenameLineEdit->setStyleSheet(R"(
QLineEdit { QLineEdit {
background-color: #142D7F; background-color: #142D7F;
@ -1267,10 +1265,7 @@ void HPPA::onStartRecordStep1()
} }
//判断是否覆盖存在的文件 //判断是否覆盖存在的文件
FileOperation* fileOperation = new FileOperation(); string imgPath = (AppSettings::instance().dataFolder() + QDir::separator() + AppSettings::instance().fileName()).toStdString();
string directory = fileOperation->getDirectoryFromString();
//string imgPath = directory + "\\tmp_image";
string imgPath = directory + "\\" + m_FilenameLineEdit->text().toStdString();
string x_location = removeFileExtension(imgPath) + "_x_location.pos"; string x_location = removeFileExtension(imgPath) + "_x_location.pos";
m_RecordState += 1; m_RecordState += 1;
@ -1309,8 +1304,7 @@ void HPPA::onStartRecordStep1()
//m_imageViewerTabWidget->clear(); //m_imageViewerTabWidget->clear();
removeAllLayersInRasterGroup(); removeAllLayersInRasterGroup();
m_Imager->setFileName2Save(imgPath); emit updateRecordingFileInfoSignal(AppSettings::instance().dataFolder(), AppSettings::instance().fileName(), this->frame_number->text().toInt());
m_Imager->setFrameNumber(this->frame_number->text().toInt());
emit StartRecordSignal();//发射开始采集信号 emit StartRecordSignal();//发射开始采集信号
ui.action_start_recording->setText(QString::fromLocal8Bit("停止采集")); 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);}"); //ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(255,0,0);}");
//应该先控制马达运动,当马达运动后,再开始光谱仪采集(发射开始采集信号) //应该先控制马达运动,当马达运动后,再开始光谱仪采集(发射开始采集信号)
m_Imager->setFileName2Save(imgPath); emit updateRecordingFileInfoSignal(AppSettings::instance().dataFolder(), AppSettings::instance().fileName(), this->frame_number->text().toInt());
m_Imager->setFrameNumber(this->frame_number->text().toInt());
m_omc->setImager(m_Imager); m_omc->setImager(m_Imager);
m_omc->run(); m_omc->run();
} }
@ -1367,8 +1360,7 @@ void HPPA::onStartRecordStep1()
//m_imageViewerTabWidget->clear(); //m_imageViewerTabWidget->clear();
removeAllLayersInRasterGroup(); removeAllLayersInRasterGroup();
m_Imager->setFileName2Save(imgPath); emit updateRecordingFileInfoSignal(AppSettings::instance().dataFolder(), AppSettings::instance().fileName(), this->frame_number->text().toInt());
m_Imager->setFrameNumber(this->frame_number->text().toInt());
m_tmc->setImager(m_Imager); m_tmc->setImager(m_Imager);
m_tmc->setPosFileName(QString::fromStdString(x_location)); m_tmc->setPosFileName(QString::fromStdString(x_location));
m_tmc->run(); m_tmc->run();
@ -1393,8 +1385,7 @@ void HPPA::onStartRecordStep1()
else if (checkedName == "mAction_RobotArm") else if (checkedName == "mAction_RobotArm")
{ {
//先判断是否选择了任务执行函数RobotArmControl::executeTask修复界面显示bug //先判断是否选择了任务执行函数RobotArmControl::executeTask修复界面显示bug
m_Imager->setFileName2Save(imgPath); emit updateRecordingFileInfoSignal(AppSettings::instance().dataFolder(), AppSettings::instance().fileName(), this->frame_number->text().toInt());
m_Imager->setFrameNumber(this->frame_number->text().toInt());
m_rac->executeTaskWithHyperImager(); m_rac->executeTaskWithHyperImager();
return; return;
@ -1797,7 +1788,6 @@ void HPPA::onconnect()
connect(m_Imager, &ImagerOperationBase::autoExposureSignal, this, &HPPA::autoExposureFinished); connect(m_Imager, &ImagerOperationBase::autoExposureSignal, this, &HPPA::autoExposureFinished);
m_Imager->connect_imager(frame_number->text().toInt()); m_Imager->connect_imager(frame_number->text().toInt());
m_Imager->setFileName2Save(m_FilenameLineEdit->text().toStdString());
//文件拷贝 //文件拷贝
m_CopyFileThread = new QThread(); m_CopyFileThread = new QThread();
@ -1819,6 +1809,7 @@ void HPPA::onconnect()
connect(this->ui.action_start_recording, SIGNAL(triggered()), this, SLOT(onStartRecordStep1())); connect(this->ui.action_start_recording, SIGNAL(triggered()), this, SLOT(onStartRecordStep1()));
connect(this, SIGNAL(StartRecordSignal()), m_Imager, SLOT(start_record())); 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(RecordWhiteSignal()), m_Imager, SLOT(record_white()));
connect(this, SIGNAL(RecordDarlSignal()), m_Imager, SLOT(record_dark())); connect(this, SIGNAL(RecordDarlSignal()), m_Imager, SLOT(record_dark()));
connect(m_Imager, SIGNAL(RecordWhiteFinishSignal()), this, SLOT(recordWhiteFinish())); connect(m_Imager, SIGNAL(RecordWhiteFinishSignal()), this, SLOT(recordWhiteFinish()));

View File

@ -74,6 +74,8 @@
#include "recordFrameCounter.h" #include "recordFrameCounter.h"
#include "setWindow.h" #include "setWindow.h"
#include "AppSettings.h"
#include "FileNameLineEdit.h"
#define PI 3.1415926 #define PI 3.1415926
@ -208,7 +210,7 @@ private:
QWidget* tmp(QWidget* a); QWidget* tmp(QWidget* a);
QLineEdit * frame_number; QLineEdit * frame_number;
QLineEdit * m_FilenameLineEdit; FileNameLineEdit * m_FilenameLineEdit;
QLabel * xmotor_state_label1; QLabel * xmotor_state_label1;
QLabel * ymotor_state_label1; QLabel * ymotor_state_label1;
@ -373,4 +375,6 @@ signals:
void RecordWhiteSignal(); void RecordWhiteSignal();
void RecordDarlSignal(); void RecordDarlSignal();
void updateRecordingFileInfoSignal(const QString& filePath, const QString& baseName, int frameNumber);
}; };

View File

@ -114,6 +114,7 @@
<ClCompile Include="Carousel.cpp" /> <ClCompile Include="Carousel.cpp" />
<ClCompile Include="Corning410Imager.cpp" /> <ClCompile Include="Corning410Imager.cpp" />
<ClCompile Include="CustomDockWidgetBase.cpp" /> <ClCompile Include="CustomDockWidgetBase.cpp" />
<ClCompile Include="FileNameLineEdit.cpp" />
<ClCompile Include="hppaConfigFile.cpp" /> <ClCompile Include="hppaConfigFile.cpp" />
<ClCompile Include="HyperImagerControl.cpp" /> <ClCompile Include="HyperImagerControl.cpp" />
<ClCompile Include="imageControl.cpp" /> <ClCompile Include="imageControl.cpp" />
@ -206,6 +207,7 @@
<QtMoc Include="AspectRatioLabel.h" /> <QtMoc Include="AspectRatioLabel.h" />
<QtMoc Include="HyperImagerControl.h" /> <QtMoc Include="HyperImagerControl.h" />
<ClInclude Include="AppSettings.h" /> <ClInclude Include="AppSettings.h" />
<QtMoc Include="FileNameLineEdit.h" />
<ClInclude Include="imager_base.h" /> <ClInclude Include="imager_base.h" />
<ClInclude Include="irisximeaimager.h" /> <ClInclude Include="irisximeaimager.h" />
<QtMoc Include="OneMotorControl.h" /> <QtMoc Include="OneMotorControl.h" />

View File

@ -205,6 +205,9 @@
<ClCompile Include="AppSettings.cpp"> <ClCompile Include="AppSettings.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="FileNameLineEdit.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<QtMoc Include="fileOperation.h"> <QtMoc Include="fileOperation.h">
@ -333,6 +336,9 @@
<QtMoc Include="setWindow.h"> <QtMoc Include="setWindow.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</QtMoc> </QtMoc>
<QtMoc Include="FileNameLineEdit.h">
<Filter>Header Files</Filter>
</QtMoc>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="imageProcessor.h"> <ClInclude Include="imageProcessor.h">

View File

@ -1,4 +1,5 @@
#include "ImagerOperationBase.h" #include "ImagerOperationBase.h"
#include <QDir>
ImagerOperationBase::ImagerOperationBase() ImagerOperationBase::ImagerOperationBase()
{ {
@ -250,6 +251,7 @@ void ImagerOperationBase::start_record()
string timesFile = removeFileExtension(m_FileName2Save2) + ".times"; string timesFile = removeFileExtension(m_FileName2Save2) + ".times";
FILE* hTimesFile = fopen(timesFile.c_str(), "w+"); FILE* hTimesFile = fopen(timesFile.c_str(), "w+");
imagerStartCollect(); imagerStartCollect();
while (m_bRecordControlState) while (m_bRecordControlState)
{ {
@ -257,6 +259,7 @@ void ImagerOperationBase::start_record()
getFrame(buffer); getFrame(buffer);
long long timeOs = getNanosecondsSinceMidnight(); long long timeOs = getNanosecondsSinceMidnight();
//qDebug() << "time ns-------------------: " << timeOs;
//减去暗电流应为buffer和dark都是unsigned short所以当dark>buffer时buffer-dark=65535 //减去暗电流应为buffer和dark都是unsigned short所以当dark>buffer时buffer-dark=65535
if (m_HasDark) if (m_HasDark)
@ -297,7 +300,7 @@ void ImagerOperationBase::start_record()
} }
x = fwrite(buffer, 2, m_FrameSize, m_fImage); x = fwrite(buffer, 2, m_FrameSize, m_fImage);
fprintf(hTimesFile, "%d\n", timeOs); fprintf(hTimesFile, "%ll\n", timeOs);
//将rgb波段提取出来以便在界面中显示 //将rgb波段提取出来以便在界面中显示
m_RgbImage->FillRgbImage(buffer);//?????????????????????????????????????????????????????????????????????????????????????????????????????? m_RgbImage->FillRgbImage(buffer);//??????????????????????????????????????????????????????????????????????????????????????????????????????
@ -320,7 +323,7 @@ void ImagerOperationBase::start_record()
//在最后一次画图前需要进行一次拉伸 //在最后一次画图前需要进行一次拉伸
//m_RgbImage //m_RgbImage
emit PlotSignal(m_FileSavedCounter, -1, filePath); emit PlotSignal(m_FileSavedCounter, -1, filePath);//采集完成后进行一次画图,以防采集帧数不是帧率的倍数时,画图不全
m_bRecordControlState = false; m_bRecordControlState = false;
WriteHdr(); WriteHdr();
@ -357,6 +360,14 @@ void ImagerOperationBase::setFileName2Save(string FileName)
m_FileSavedCounter = 0; 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) void ImagerOperationBase::setFocusControlState(bool FocusControlState)
{ {
m_bFocusControlState = FocusControlState; m_bFocusControlState = FocusControlState;

View File

@ -101,6 +101,9 @@ public slots:
virtual void record_white(); virtual void record_white();
void getFocusIndexSobel(); void getFocusIndexSobel();
void updateRecordingFileInfo(const QString& filePath, const QString& baseName, int frameNumber);
signals: signals:
void PlotSignal(int, int, QString);//绘制影像信号,第一个参数:第几个影像;第二个参数:采集到的帧数,-1代表此次采集的最后一次绘制 void PlotSignal(int, int, QString);//绘制影像信号,第一个参数:第几个影像;第二个参数:采集到的帧数,-1代表此次采集的最后一次绘制
void RecordFinishedSignal_WhenFrameNumberMeet();//采集完成信号需要采集的总帧数m_iFrameNumber采集完成 void RecordFinishedSignal_WhenFrameNumberMeet();//采集完成信号需要采集的总帧数m_iFrameNumber采集完成

View File

@ -285,8 +285,13 @@ void ResononNirImager::start_record()
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
// <20>ڿ<EFBFBD>ʼ<EFBFBD>ɼ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ϣ<EFBFBD><CFA2>UI <20><><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD> MapLayer <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// prepare file name that will be used for saving
m_FileName2Save2 = m_FileName2Save + "_" + std::to_string(m_FileSavedCounter) + ".bil"; m_FileName2Save2 = m_FileName2Save + "_" + std::to_string(m_FileSavedCounter) + ".bil";
QString baseName = QString::fromStdString(getFileNameFromPath(m_FileName2Save2));
QString filePath = QString::fromStdString(m_FileName2Save2); QString filePath = QString::fromStdString(m_FileName2Save2);
emit LayerFileCreated(baseName, filePath, m_FileSavedCounter);
FILE* m_fImage = fopen(m_FileName2Save2.c_str(), "w+b"); FILE* m_fImage = fopen(m_FileName2Save2.c_str(), "w+b");
size_t x; size_t x;
@ -344,7 +349,7 @@ void ResononNirImager::start_record()
} }
x = fwrite(buffer, 2, m_FrameSize, m_fImage); x = fwrite(buffer, 2, m_FrameSize, m_fImage);
fprintf(hTimesFile, "%lld\n", timeOs); fprintf(hTimesFile, "%ll\n", timeOs);
//<2F><>rgb<67><62><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ //<2F><>rgb<67><62><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
m_RgbImage->FillRgbImage(buffer);//?????????????????????????????????????????????????????????????????????????????????????????????????????? m_RgbImage->FillRgbImage(buffer);//??????????????????????????????????????????????????????????????????????????????????????????????????????
@ -360,7 +365,6 @@ void ResononNirImager::start_record()
if (m_iFrameCounter >= m_iFrameNumber) if (m_iFrameCounter >= m_iFrameNumber)
{ {
break; break;
//qDebug() << "<22><><EFBFBD><EFBFBD>ֹͣ<CDA3>ɼ<EFBFBD><C9BC><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>";
} }
} }
@ -372,6 +376,11 @@ void ResononNirImager::start_record()
m_bRecordControlState = false; m_bRecordControlState = false;
WriteHdr(); WriteHdr();
// <20><><EFBFBD><EFBFBD> ImageFileSaved <20>źţ<C5BA>֪ͨ UI <20><><EFBFBD>Ѹ<EFBFBD><D1B8>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// m_FileName2Save2 <20><><EFBFBD><EFBFBD><EFBFBD>˱<EFBFBD><CBB1><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD> .bil <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "tmp_image_0.bil"<22><>
emit ImageFileSaved(QString::fromStdString(m_FileName2Save2), m_FileSavedCounter);
m_FileSavedCounter++; m_FileSavedCounter++;
if (m_iFrameCounter >= m_iFrameNumber) if (m_iFrameCounter >= m_iFrameNumber)

View File

@ -243,7 +243,11 @@ QPushButton:pressed
</widget> </widget>
</item> </item>
<item row="0" column="1"> <item row="0" column="1">
<widget class="QLineEdit" name="dataFolderLineEdit"/> <widget class="QLineEdit" name="dataFolderLineEdit">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item> </item>
<item row="0" column="2"> <item row="0" column="2">
<widget class="QPushButton" name="dataFolderBtn"> <widget class="QPushButton" name="dataFolderBtn">