add,山地所贡嘎山11:

完成整个采集流程
This commit is contained in:
tangchao0503
2026-09-11 15:52:28 +08:00
parent 9bc2133e24
commit 0562e8592c
18 changed files with 247 additions and 100 deletions

View File

@ -137,7 +137,7 @@ void AppSettings::setRgbCameraDataFolder(const QString& path)
QString AppSettings::rgbCameraFileName() const
{
return m_settings.value("RgbCamera/FileName", "test").toString();
return m_settings.value("RgbCamera/FileName", "test_rgb_data").toString();
}
void AppSettings::setRgbCameraFileName(const QString& name)
@ -145,6 +145,16 @@ void AppSettings::setRgbCameraFileName(const QString& name)
m_settings.setValue("RgbCamera/FileName", name);
}
QString AppSettings::fodisCameraFileName() const
{
return m_settings.value("FodisCamera/FileName", "test_fodis_data").toString();
}
void AppSettings::setFodisCameraFileName(const QString& name)
{
m_settings.setValue("FodisCamera/FileName", name);
}
double AppSettings::scanSpeed() const
{
return m_settings.value("OneMotorControl/ScanSpeed", kDefaultScanSpeed).toDouble();

View File

@ -45,6 +45,9 @@ public:
QString rgbCameraFileName() const;
void setRgbCameraFileName(const QString& name);
QString fodisCameraFileName() const;
void setFodisCameraFileName(const QString& name);
// 扫描速度
double scanSpeed() const;
void setScanSpeed(double value);

View File

@ -459,7 +459,9 @@ OneMotionCaptureCoordinator::OneMotionCaptureCoordinator(
connect(this, &OneMotionCaptureCoordinator::stopRecordHSISignal,
m_cameraCtrl, &ImagerOperationBase::stop_record);
connect(m_cameraCtrl, &ImagerOperationBase::RecordFinishedSignal_WhenFrameNumberMeet,
this, &OneMotionCaptureCoordinator::handleCaptureCompleteWhenFrameNumberMeet);
this, &OneMotionCaptureCoordinator::handleHyperImagerCaptureComplete);
connect(m_cameraCtrl, &ImagerOperationBase::RecordFinishedSignal_WhenFrameNumberNotMeet,
this, &OneMotionCaptureCoordinator::handleHyperImagerCaptureComplete);
}
OneMotionCaptureCoordinator::~OneMotionCaptureCoordinator()
@ -498,12 +500,9 @@ void OneMotionCaptureCoordinator::stopStepMotion()
{
m_cameraCtrl->stop_record();
}
emit stopMotorSignal(0);
m_isHypercamStopRecord = true;
}
void OneMotionCaptureCoordinator::handleCaptureCompleteWhenFrameNumberMeet()
void OneMotionCaptureCoordinator::handleHyperImagerCaptureComplete()
{
emit stopMotorSignal(0);
m_isHypercamStopRecord = true;
@ -588,13 +587,11 @@ void OneMotionCaptureCoordinator::handleMotorStoped(int motorID, double pos)
}
move2LocBeforeStart();
emit sequenceComplete_cam_stop_before_motorback(0);
emit sequenceCompleteSignal_hyperImagerStopRecord(0);
}
else
{
// emit sequenceComplete last: the slot connected to it may delete this object,
// so no member access is allowed after this point.
emit sequenceComplete(0);
emit sequenceCompleteSignal_motorBack2Origin(0);
}
}

View File

@ -141,11 +141,11 @@ public slots:
void startStepMotion(OneMotionCapturePathLine pathLine);
void stopStepMotion();
void handleCaptureCompleteWhenFrameNumberMeet();
void handleHyperImagerCaptureComplete();
signals:
void sequenceComplete_cam_stop_before_motorback(int);
void sequenceComplete(int);
void sequenceCompleteSignal_hyperImagerStopRecord(int);
void sequenceCompleteSignal_motorBack2Origin(int);
void errorOccurred(const QString& error);
void moveTo(int, double, double, int);
void moveSignal(int, bool, double, int);

View File

@ -50,7 +50,7 @@ private:
public slots:
virtual void recordDark(QString path) = 0;
virtual void recordTarget(int recordTimes, QString path) = 0;
virtual void recordTarget2csv(int recordTimes, QString path) = 0;
virtual void autoExpose() = 0;
signals:

View File

@ -27,10 +27,9 @@ FodisWindow::FodisWindow(QWidget* parent)
connect(this->ui.dataFolderBtn, SIGNAL(clicked()), this, SLOT(onSelectDataFolder()));
// 初始化数据保存路径显示(从 AppSettings 恢复或使用默认)
ui.dataFolderLineEdit->setText(AppSettings::instance().depthCameraDataFolder());
connect(ui.fileNameLineEdit, &QLineEdit::textChanged, this, &FodisWindow::onFileNameChanged);
setDataFolder(AppSettings::instance().FiberImagerDataFolder());
loadSettings();
}
FodisWindow::~FodisWindow()
@ -41,6 +40,12 @@ FodisWindow::~FodisWindow()
m_JinspFiberImagerOperation = nullptr;
}
void FodisWindow::loadSettings()
{
ui.dataFolderLineEdit->setText(AppSettings::instance().FiberImagerDataFolder());
ui.fileNameLineEdit->setText(AppSettings::instance().fodisCameraFileName());
}
void FodisWindow::onSelectDataFolder()
{
QString dir = QFileDialog::getExistingDirectory(this,
@ -59,6 +64,17 @@ void FodisWindow::setDataFolder(QString dir)
}
}
void FodisWindow::setFileName(QString name)
{
ui.fileNameLineEdit->setText(name);
AppSettings::instance().setFodisCameraFileName(name);
}
void FodisWindow::onFileNameChanged(const QString& text)
{
AppSettings::instance().setFodisCameraFileName(text);
}
void FodisWindow::setCaptureInterval(int captureIntervalSeconds)
{
m_JinspFiberImagerOperation->setCaptureInterval(captureIntervalSeconds);
@ -69,11 +85,24 @@ void FodisWindow::openFiberImager()
openFiberImager_expose_record("pos_null");
}
void FodisWindow::openFiberImager_expose_record(QString posInfo)
void FodisWindow::openFiberImager_expose_record(QString posInfo, QString dataFolder)
{
setDataFolder(dataFolder);
setFileName(posInfo);
if (!m_JinspFiberImagerOperation->getRecordStatus())
{
emit openFiberImagerSignal(posInfo);
QString folder = AppSettings::instance().FiberImagerDataFolder();
QDir dir(folder);
if (!dir.exists())
{
dir.mkpath(".");
}
QString eventPrefix = posInfo.isEmpty() ? "default" : posInfo;
QString dateStr = QDateTime::currentDateTime().toString("yyyy-MM-dd_HH-mm-ss");
QString m_qstrFullFileName = folder + QDir::separator() + dateStr + "_" + eventPrefix + "_fodis_data.dat";
emit openFiberImagerSignal(m_qstrFullFileName);
}
}

View File

@ -31,15 +31,17 @@ public:
public Q_SLOTS:
void openFiberImager();
void openFiberImager_expose_record(QString posInfo);
void openFiberImager_expose_record(QString posInfo, QString dataFolder = "");
void onCamOpened();
void closeFiberImager();
void onCamClosed();
void onSelectDataFolder();
void onFileNameChanged(const QString& text);
void setFileName(QString name);
signals:
void openFiberImagerSignal(QString posInfo);
void openFiberImagerSignal(QString filePath);
void PlotSpectralSignal();
void FiberImagerClosedSignal();
@ -53,4 +55,6 @@ private:
QThread* m_FiberImagerThread;
JinspFiberImager* m_JinspFiberImagerOperation;
void loadSettings();
};

View File

@ -1,6 +1,7 @@
#include "GonggaShanRecordCtl.h"
#include <cmath>
#include <Windows.h>
GonggaShanRecordCtl::GonggaShanRecordCtl(QWidget* parent)
: QDialog(parent)
@ -124,6 +125,26 @@ void GonggaShanRecordCtl::onGpsAcquisition()
// 发送GPS数据给任务执行器
emit gpsAcquisitionDoneSignal_gonggashan(data.latitude, data.longitude, data.altitude);
// 使用GPS时间同步系统时间
SYSTEMTIME st;
memset(&st, 0, sizeof(SYSTEMTIME));
// 解析GPS日期 (DDMMYY格式)
st.wDay = data.utcDate.mid(0, 2).toUShort();
st.wMonth = data.utcDate.mid(2, 2).toUShort();
st.wYear = 2000 + data.utcDate.mid(4, 2).toUShort();
// 解析GPS时间 (HHMMSS格式) - GPS时间是UTC时间
st.wHour = data.utcTime.mid(0, 2).toUShort();
st.wMinute = data.utcTime.mid(2, 2).toUShort();
st.wSecond = data.utcTime.mid(4, 2).toUShort();
st.wMilliseconds = 0;
st.wDayOfWeek = 0;
// 设置系统时间 (UTC时间直接设置Windows会自动转换为本地时间显示)
SetSystemTime(&st);
qDebug() << "System time synced from GPS:" << st.wYear << "-" << st.wMonth << "-" << st.wDay << " " << st.wHour << ":" << st.wMinute << ":" << st.wSecond;
}
});
@ -153,9 +174,8 @@ void GonggaShanRecordCtl::onCalculateMotorSpeed(double hyperFrameRate)
{
FramerateRotateSpeedCal tmp;
double rotationSpeed = tmp.calculate(300, 17.6, 900, hyperFrameRate);
double rotationSpeed2 = tmp.calculate(300, 17.6, 900, 60);
int a;
emit calculateMotorSpeedDoneSignal_gonggashan(rotationSpeed);
}
void GonggaShanRecordCtl::logStatus(const QString& message, bool isHearderBlankLine, bool isTailBlankLine)
@ -297,6 +317,17 @@ void GonggashanTaskExecutor::buildStateMachine()
// ---- GpsAcquisition 状态:等待外部硬件回调 ----
connect(m_gpsAcquisitionState, &QState::entered, this, [this]() {
qDebug() << "GonggashanTaskExecutor: Enter m_gpsAcquisitionState";
// 创建当天日期的文件夹
QString appDir = QCoreApplication::applicationDirPath();
QString todayFolder = QDate::currentDate().toString("yyyy-MM-dd");
m_todayDataFolder = appDir + "/" + todayFolder;
QDir dir;
if (!dir.exists(m_todayDataFolder)) {
dir.mkpath(m_todayDataFolder);
qDebug() << "Created today's data folder:" << m_todayDataFolder;
}
emit gpsAcquisitionSignal();
});
connect(m_gpsAcquisitionState, &QState::exited, this, [this]() {
@ -325,7 +356,7 @@ void GonggashanTaskExecutor::buildStateMachine()
// ---- FiberExposure 状态:等待外部硬件回调 ----
connect(m_fiberExposureState, &QState::entered, this, [this]() {
qDebug() << "GonggashanTaskExecutor: Enter m_fiberExposureState";
emit fiberExposureRecordSignal(m_posInfo);
emit fiberExposureRecordSignal(m_posInfo, m_todayDataFolder);
});
connect(m_fiberExposureState, &QState::exited, this, [this]() {
qDebug() << "GonggashanTaskExecutor: Exit m_fiberExposureState";
@ -351,7 +382,7 @@ void GonggashanTaskExecutor::buildStateMachine()
// ---- DataCollection 状态:同步阶段 ----
connect(m_dataCollectionState, &QState::entered, this, [this]() {
qDebug() << "GonggashanTaskExecutor: Enter m_dataCollectionState";
emit startCollectionSignal(m_posInfo, m_gpsData);
emit startCollectionSignal(m_posInfo, m_gpsData, m_motorRotationSpeed, m_todayDataFolder);
});
connect(m_dataCollectionState, &QState::exited, this, [this]() {
qDebug() << "GonggashanTaskExecutor: Exit m_dataCollectionState";
@ -457,14 +488,13 @@ void GonggashanTaskExecutor::onGpsAcquired(double latitude, double longitude, do
emit gpsAcquisitionDone();
}
void GonggashanTaskExecutor::onMotorSpeedCalculated(double speed)
void GonggashanTaskExecutor::onMotorSpeedCalculated(double rotationSpeed)
{
if (currentState() != m_motorCalcState) return;
m_motorSpeed = speed;
emit motorSpeedSignal(speed);
if (motorCalcImpl()) {
emit motorSpeedDone();
}
m_motorRotationSpeed = rotationSpeed;
emit motorSpeedSignal(rotationSpeed);
motorCalcImpl();
emit motorSpeedDone();
}
void GonggashanTaskExecutor::onRcordComplete()
@ -499,7 +529,7 @@ bool GonggashanTaskExecutor::gpsAcquisitionImpl(double lat, double lon, double a
bool GonggashanTaskExecutor::motorCalcImpl()
{
qDebug() << "GonggashanTaskExecutor: Motor speed calculated:" << m_motorSpeed;
qDebug() << "GonggashanTaskExecutor: Motor speed calculated:" << m_motorRotationSpeed;
return true;
}

View File

@ -55,15 +55,15 @@ public slots:
void onHyperExposureComplete(double exposureTime, double frameRate);
void onFiberExposureComplete(double exposureTime);
void onGpsAcquired(double latitude, double longitude, double altitude);
void onMotorSpeedCalculated(double speed);
void onMotorSpeedCalculated(double rotationSpeed);
void onRcordComplete();
signals:
void hyperAutoExposureSignal_gonggashan();
void fiberExposureRecordSignal(QString posInfo);
void fiberExposureRecordSignal(QString posInfo, QString dataFolder);
void gpsAcquisitionSignal();
void motorSpeedSignal(double speed);
void startCollectionSignal(const QString& posInfo, const QString& gpsData);
void startCollectionSignal(const QString& posInfo, const QString& gpsData, double m_motorRotationSpeed, QString dataFolder);
void calculateMotorSpeedSignal(double hyperFrameRate);
@ -97,11 +97,12 @@ private:
QString m_posInfo;
QString m_gpsData;
double m_motorSpeed = 0.0;
double m_motorRotationSpeed = 0.0;
double m_hyperExposureTime = 0;
double m_hyperFrameRate = 0;
double m_fiberExposureTime = 0;
bool m_stopRequested = false;
QString m_todayDataFolder; // 当天日期的数据保存文件夹
// Qt State Machine
QStateMachine* m_machine = nullptr;
@ -130,15 +131,15 @@ public Q_SLOTS:
Q_SIGNALS:
void gpsAcquisitionDoneSignal_gonggashan(double lat, double lon, double alt);
void calculateMotorSpeedDoneSignal_gonggashan(double speed);
void calculateMotorSpeedDoneSignal_gonggashan(double rotationSpeed);
void hyperAutoExposureSignal_gonggashan();
void hyperAutoExposureDoneSignal_gonggashan(double exposureTime, double frameRate);
void fiberExposureRecordSignal_gonggashan(QString posInfo);
void fiberExposureRecordSignal_gonggashan(QString posInfo, QString dataFolder);
void fiberExposureDoneSignal_gonggashan(double exposureTime);
void startRcordSignal_gonggashan(QString posInfo);
void startRcordSignal_gonggashan(const QString& posInfo, const QString& gpsData, double m_motorRotationSpeed, QString dataFolder);
void recordFinishedSignal_gonggashan();
private Q_SLOTS:

View File

@ -1121,8 +1121,10 @@ void HPPA::setupGonggashanAutoRecordConnection()
connect(m_fodisWindow, &FodisWindow::exposureCompleteSignal, m_gonggaShanRecordCtl, &GonggaShanRecordCtl::fiberExposureDoneSignal_gonggashan);
connect(m_gonggaShanRecordCtl, &GonggaShanRecordCtl::startRcordSignal_gonggashan, this, &HPPA::onGonggashanRecord);
connect(m_omc, &OneMotorControl::sequenceComplete, m_fodisWindow, &FodisWindow::closeFiberImager);
connect(m_omc, &OneMotorControl::sequenceComplete, m_gonggaShanRecordCtl, &GonggaShanRecordCtl::recordFinishedSignal_gonggashan);
connect(m_omc, &OneMotorControl::sequenceCompleteSignal_hyperImagerStopRecord, m_rgbCameraControlWindow, &rgbCameraWindow::toggleTakePhoto);
connect(m_omc, &OneMotorControl::sequenceCompleteSignal_hyperImagerStopRecord, m_fodisWindow, &FodisWindow::closeFiberImager);
connect(m_omc, &OneMotorControl::sequenceCompleteSignal_hyperImagerStopRecord, m_gonggaShanRecordCtl, &GonggaShanRecordCtl::recordFinishedSignal_gonggashan);
//connect(m_omc, &OneMotorControl::sequenceComplete_motorBack2Origin, m_gonggaShanRecordCtl, &GonggaShanRecordCtl::);
}
void HPPA::onGonggashanHyperAutoExposure()
@ -1139,17 +1141,18 @@ void HPPA::onGonggashanHyperAutoExposure()
m_omc->multiPosHyperAutoExposure();
}
void HPPA::onGonggashanFiberAutoExposureRecord(QString posInfo)
void HPPA::onGonggashanFiberAutoExposureRecord(QString posInfo, QString dataFolder)
{
m_fodisWindow->openFiberImager_expose_record(posInfo);
//设置数据存储路径和文件名
m_fodisWindow->openFiberImager_expose_record(posInfo, dataFolder);
}
void HPPA::onGonggashanRecord(QString posInfo)
void HPPA::onGonggashanRecord(const QString& posInfo, const QString& gpsData, double motorRotationSpeed, QString dataFolder)
{
//设置文件名
//AppSettings::instance().setFrameRate(f);
//AppSettings::instance().setIntegrationTime(e);
//AppSettings::instance().setDataFolder(filePath);
AppSettings::instance().setDataFolder(dataFolder);
QString dateStr = QDateTime::currentDateTime().toString("yyyy-MM-dd_HH-mm-ss");
//QString fi = AppSettings::instance().fileName() + "_" + dateStr;
@ -1159,6 +1162,7 @@ void HPPA::onGonggashanRecord(QString posInfo)
//连接马达和光谱仪
m_omc->connectMotor(false);
m_omc->setScanSpeed(motorRotationSpeed);
if (!testImagerVality())
{
@ -1168,7 +1172,7 @@ void HPPA::onGonggashanRecord(QString posInfo)
onStartRecordStep1();
//采集rgb图像
m_rgbCameraControlWindow->toggleTakePhoto();
}
void HPPA::recordFromRobotArm(int fileCounter)

View File

@ -457,9 +457,9 @@ public Q_SLOTS:
void onStretchedImageReady(int fileNumber, const QString& filePath, QPixmap& pixmap);
void onStretchProcessingError(int fileNumber, const QString& filePath, const QString& error);
void onGonggashanRecord(QString posInfo);
void onGonggashanRecord(const QString& posInfo, const QString& gpsData, double motorRotationSpeed, QString dataFolder);
void onGonggashanHyperAutoExposure();
void onGonggashanFiberAutoExposureRecord(QString posInfo);
void onGonggashanFiberAutoExposureRecord(QString posInfo, QString dataFolder);
protected:
void closeEvent(QCloseEvent* event) override;

View File

@ -2,7 +2,8 @@
// Created by 73505 on 2023/5/7.
//
#include <algorithm>
#include <QFile>
#include <QDir>
#include "JinspFiberImager.h"
JinspFiberImager::JinspFiberImager(bool bIsUSBMode, std::string ucPortNumber, std::string strDeviceName)
@ -132,7 +133,7 @@ void JinspFiberImager::recordDark(QString path)
outfile.close();
}
void JinspFiberImager::recordTarget(int recordTimes, QString path)
void JinspFiberImager::recordTarget2csv(int recordTimes, QString path)
{
//获取设备信息
DeviceAttribute attribute;
@ -318,10 +319,8 @@ void JinspFiberImager::setCaptureInterval(int captureIntervalSeconds)
m_captureIntervalMilliseconds = captureIntervalSeconds * 1000;
}
void JinspFiberImager::OpenFiberImagerAndRecord(QString posInfo)
void JinspFiberImager::OpenFiberImagerAndRecord(QString filePath)
{
m_posInfo = posInfo;
//连接光谱仪
QString SN;
QString pixelCount;
@ -335,13 +334,25 @@ void JinspFiberImager::OpenFiberImagerAndRecord(QString posInfo)
emit exposureCompleteSignal(m_iExposureTime);
//采集
QFile qfData(filePath);
bool bRes = qfData.open(QFile::WriteOnly | QIODevice::Append);
if (!bRes)
{
printf("WriteData QFile open Failed");
return;
}
m_record = true;
DataFrame data;
while (m_record)
{
recordTarget(1, AppSettings::instance().FiberImagerDataFolder());
singleShot(data);
qfData.write((char*)&data, sizeof(DataFrame));
qfData.flush();
QThread::msleep(m_captureIntervalMilliseconds);
}
qfData.close();
std::cout << "close.........." << std::endl;
m_FiberSpectrometer->Close();

View File

@ -61,10 +61,10 @@ private:
public slots:
void recordDark(QString path);
void recordTarget(int recordTimes, QString path);
void recordTarget2csv(int recordTimes, QString path);
void autoExpose();
void OpenFiberImagerAndRecord(QString posInfo);
void OpenFiberImagerAndRecord(QString filePath);
signals:
void sendExposureTimeSignal(int exposureTime);

View File

@ -42,6 +42,11 @@ void OneMotorControl::onConnectMotor()
connectMotor(true);
}
void OneMotorControl::setScanSpeed(double speed)
{
ui.speed_lineEdit->setText(QString::number(speed));
}
void OneMotorControl::connectMotor(bool isNotification)
{
if (getMotorsConnectionStatus())
@ -225,16 +230,20 @@ void OneMotorControl::run()
{
if (m_coordinator)//当高光谱相机停止采集后马达还未回到原点时上次任务的m_coordinator还没有被销毁
{
onSequenceComplete(0);
onSequenceComplete_motorBack2Origin(0);
}
qRegisterMetaType<OneMotionCapturePathLine>("OneMotionCapturePathLine");
m_coordinator = new OneMotionCaptureCoordinator(m_multiAxisController, m_Imager);
m_coordinator->setObjectName("testOneMotionCaptureCoordinator");
connect(this, SIGNAL(start(OneMotionCapturePathLine)), m_coordinator, SLOT(startStepMotion(OneMotionCapturePathLine)));
connect(this, SIGNAL(stopStepMotionSignal()), m_coordinator, SLOT(stopStepMotion()));
connect(m_coordinator, SIGNAL(sequenceComplete(int)), this, SLOT(onSequenceComplete(int)));
connect(this, &OneMotorControl::start, m_coordinator, &OneMotionCaptureCoordinator::startStepMotion);
connect(this, &OneMotorControl::stopStepMotionSignal, m_coordinator, &OneMotionCaptureCoordinator::stopStepMotion);
connect(m_coordinator, &OneMotionCaptureCoordinator::sequenceCompleteSignal_hyperImagerStopRecord,
this, &OneMotorControl::sequenceCompleteSignal_hyperImagerStopRecord);
connect(m_coordinator, &OneMotionCaptureCoordinator::sequenceCompleteSignal_motorBack2Origin,
this, &OneMotorControl::onSequenceComplete_motorBack2Origin);
OneMotionCapturePathLine tmp;
tmp.speedRecord = ui.speed_lineEdit->text().toDouble();
@ -271,18 +280,14 @@ void OneMotorControl::multiPosHyperAutoExposure()
void OneMotorControl::onSequenceComplete_gonggashan_autoexpose(int state)
{
emit sequenceComplete();
emit multiPosAutoexposeSequenceCompleteSignal();
m_coordinator_gonggashan_autoexpose->deleteLater();
}
void OneMotorControl::onSequenceComplete(int state)
void OneMotorControl::onSequenceComplete_motorBack2Origin(int state)
{
emit sequenceComplete();
disconnect(this, SIGNAL(start(OneMotionCapturePathLine)), m_coordinator, SLOT(startStepMotion(OneMotionCapturePathLine)));
disconnect(this, SIGNAL(stopStepMotionSignal()), m_coordinator, SLOT(stopStepMotion()));
disconnect(m_coordinator, SIGNAL(sequenceComplete(int)), this, SLOT(onSequenceComplete(int)));
emit sequenceComplete_motorBack2Origin();
// Use deleteLater() instead of delete: this slot may have been called directly
// from OneMotionCaptureCoordinator's call stack (direct connection), so deleting

View File

@ -35,6 +35,8 @@ public:
void connectMotor(bool isNotification);
void setScanSpeed(double speed);
public Q_SLOTS:
void onConnectMotor();
@ -48,7 +50,7 @@ public Q_SLOTS:
void onxMotorLeft();
void onxMotorStop();
void onSequenceComplete(int state);
void onSequenceComplete_motorBack2Origin(int state);
void onSequenceComplete_gonggashan_autoexpose(int state);
signals:
@ -65,11 +67,16 @@ signals:
void stopStepMotionSignal();
void sequenceComplete();
void sequenceComplete_motorBack2Origin();
void broadcastLocationSignal(std::vector<double>);
void hyperAutoExposureDoneSignal_gonggashan(double exposureTime, double frameRate);
void multiPosAutoexposeSequenceCompleteSignal();
void sequenceCompleteSignal_hyperImagerStopRecord(int);
private:
Ui::OneMotorControl_UI ui;
@ -135,6 +142,7 @@ signals:
void broadcastLocationSignal(std::vector<double>);
private:
Ui::OneMotorControl_UI ui;

View File

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>857</width>
<height>477</height>
<width>438</width>
<height>330</height>
</rect>
</property>
<property name="sizePolicy">
@ -83,7 +83,7 @@ QPushButton:pressed
</property>
</spacer>
</item>
<item row="1" column="1">
<item row="1" column="1" colspan="2">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="1">
<widget class="QPushButton" name="close_btn">
@ -113,33 +113,7 @@ QPushButton:pressed
</item>
</layout>
</item>
<item row="2" column="0">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>135</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="2">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>135</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="3" column="1">
<item row="2" column="1" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label">
@ -184,7 +158,71 @@ QPushButton:pressed
</item>
</layout>
</item>
<item row="4" column="1">
<item row="3" column="0">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>135</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="3" column="1" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QLabel" name="label_2">
<property name="styleSheet">
<string notr="true">QLabel {
color: rgb(255, 255, 255);
}</string>
</property>
<property name="text">
<string>文件名</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="fileNameLineEdit">
<property name="styleSheet">
<string notr="true">QLineEdit {
background-color: #142D7F;
color: #e6eeff;
border: 1px solid #2f6bff;
border-radius: 6px;
padding: 4px 8px;
min-width: 70px;
min-height: 20px;
font-size: 13px;
}</string>
</property>
<property name="text">
<string>test</string>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
<item row="3" column="3">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>135</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="4" column="2">
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>

View File

@ -64,6 +64,11 @@ rgbCameraWindow::~rgbCameraWindow()
delete m_RgbCameraThread;
}
void rgbCameraWindow::toggleTakePhoto()
{
emit ui.take_photo_btn->clicked();
}
void rgbCameraWindow::setupCaptureCoordinator()
{
m_captureCoordinator = new RgbCameraCaptureCoordinator(m_RgbCamera, this);

View File

@ -32,6 +32,8 @@ public Q_SLOTS:
void onSelectDataFolder();
void onFileNameChanged(const QString& text);
void toggleTakePhoto();
Q_SIGNALS:
void PlotRgbImageSignal();
void CamClosedSignal();