diff --git a/HPPA/HPPA.cpp b/HPPA/HPPA.cpp
index 81cba02..51b6155 100644
--- a/HPPA/HPPA.cpp
+++ b/HPPA/HPPA.cpp
@@ -773,6 +773,10 @@ void HPPA::initControlTabwidget()
m_depthCameraWindow = new DepthCameraWindow();
ui.controlTabWidget->addTab(m_depthCameraWindow, QString::fromLocal8Bit("深度相机"));
+ //单反相机
+ m_singleLensReflexCameraWindow = new SingleLensReflexCameraWindow();
+ ui.controlTabWidget->addTab(m_singleLensReflexCameraWindow, QString::fromLocal8Bit("单反相机"));
+
//rgb相机
m_rgbCameraControlWindow = new rgbCameraWindow();
connect(m_rgbCameraControlWindow, &rgbCameraWindow::PlotRgbImageSignal, this, &HPPA::onPlotRgbImage);
@@ -1233,6 +1237,7 @@ void HPPA::createOneMotorScenario()
ui.mAction_1AxisMotor->setChecked(true);
//右下角控制tab
+ m_tabManager->hideTab(m_singleLensReflexCameraWindow);
m_tabManager->hideTab(m_depthCameraWindow);
m_tabManager->hideTab(m_rgbCameraControlWindow);
m_tabManager->hideTab(m_adt);
@@ -1266,6 +1271,7 @@ void HPPA::createPlantPhenotypeScenario()
m_tabManager->hideTab(m_omc);
m_tabManager->showTab(m_depthCameraWindow);
+ m_tabManager->showTab(m_singleLensReflexCameraWindow);
m_tabManager->showTab(m_rgbCameraControlWindow);
m_tabManager->showTab(m_adt);
m_tabManager->showTab(m_pc);
diff --git a/HPPA/HPPA.h b/HPPA/HPPA.h
index 2c6f816..d43a924 100644
--- a/HPPA/HPPA.h
+++ b/HPPA/HPPA.h
@@ -79,6 +79,7 @@
#include "rgbCameraWindow.h"
#include "DepthCameraWindow.h"
+#include "SingleLensReflexCameraWindow.h"
#define PI 3.1415926
@@ -281,6 +282,7 @@ private:
rgbCameraWindow* m_rgbCameraControlWindow;
ImageControl* m_ic;
DepthCameraWindow* m_depthCameraWindow;
+ SingleLensReflexCameraWindow* m_singleLensReflexCameraWindow;
adjustTable* m_adt;
PowerControl* m_pc;
RobotArmControl* m_rac;
diff --git a/HPPA/HPPA.vcxproj b/HPPA/HPPA.vcxproj
index fb49336..95c9557 100644
--- a/HPPA/HPPA.vcxproj
+++ b/HPPA/HPPA.vcxproj
@@ -151,6 +151,7 @@
+
Create
Create
@@ -187,6 +188,7 @@
+
@@ -239,6 +241,7 @@
+
diff --git a/HPPA/HPPA.vcxproj.filters b/HPPA/HPPA.vcxproj.filters
index 4553bb2..f71e7f5 100644
--- a/HPPA/HPPA.vcxproj.filters
+++ b/HPPA/HPPA.vcxproj.filters
@@ -217,6 +217,9 @@
Source Files
+
+ Source Files
+
@@ -354,6 +357,9 @@
Header Files
+
+ Header Files
+
@@ -448,6 +454,9 @@
Form Files
+
+ Form Files
+
diff --git a/HPPA/SingleLensReflexCamera.ui b/HPPA/SingleLensReflexCamera.ui
new file mode 100644
index 0000000..a250198
--- /dev/null
+++ b/HPPA/SingleLensReflexCamera.ui
@@ -0,0 +1,160 @@
+
+
+ SingleLensReflexCameraClass
+
+
+
+ 0
+ 0
+ 855
+ 481
+
+
+
+
+ 0
+ 0
+
+
+
+ SingleLensReflexCamera
+
+
+ QGroupBox
+{
+ border: 12px solid transparent;
+ /*border-top: 12px solid transparent;
+ border-right: 0px solid transparent;
+ border-bottom: 0px solid transparent;
+ border-left: 0px solid transparent;*/
+ color: #ACCDFF;
+}
+
+QPushButton
+{
+ /*width: 172px;
+ height: 56px;*/
+ font: 19pt "新宋体";
+ background-color: qlineargradient(
+ spread:pad,
+ x1:0.5, y1:0, x2:0.5, y2:1,
+ stop:0 #283D86,
+ stop:1 #0F1A40
+ );
+ color: white;
+ border: none;
+ padding: 8px 16px;
+ border-radius: 4px;
+}
+QPushButton:hover
+{
+ background-color: qlineargradient(
+ spread:pad,
+ x1:0, y1:0, x2:1, y2:0,
+ stop:0 #3A4875,
+ stop:1 #5F6B91
+ );
+}
+/* 按下时的效果 */
+QPushButton:pressed
+{
+ background-color: qlineargradient(
+ spread:pad,
+ x1:0, y1:0, x2:1, y2:0,
+ stop:0 #1A254F,
+ stop:1 #3A466B
+ );
+ /* 可选:添加下压效果 */
+ padding-top: 9px;
+ padding-bottom: 7px;
+}
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 18
+ 100
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 135
+ 20
+
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+ 关 闭
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ 打 开
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 135
+ 20
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 18
+ 100
+
+
+
+
+
+
+
+
+
+
diff --git a/HPPA/SingleLensReflexCameraWindow.cpp b/HPPA/SingleLensReflexCameraWindow.cpp
new file mode 100644
index 0000000..04767ed
--- /dev/null
+++ b/HPPA/SingleLensReflexCameraWindow.cpp
@@ -0,0 +1,95 @@
+#include "SingleLensReflexCameraWindow.h"
+
+SingleLensReflexCameraWindow::SingleLensReflexCameraWindow(QWidget* parent)
+ : QDialog(parent)
+{
+ ui.setupUi(this);
+
+ m_SLRCameraThread = new QThread();
+ m_SingleLensReflexCameraOperation = new SingleLensReflexCameraOperation();
+ m_SingleLensReflexCameraOperation->moveToThread(m_SLRCameraThread);
+ m_SLRCameraThread->start();
+
+ connect(ui.openSLRCamera_btn, &QPushButton::clicked, this, &SingleLensReflexCameraWindow::openSLRCamera);
+ connect(ui.closeSLRCamera_btn, &QPushButton::clicked, this, &SingleLensReflexCameraWindow::closeSLRCamera);
+
+ connect(this, &SingleLensReflexCameraWindow::openSLRCameraSignal, m_SingleLensReflexCameraOperation, &SingleLensReflexCameraOperation::OpenSLRCamera);
+
+ connect(m_SingleLensReflexCameraOperation, &SingleLensReflexCameraOperation::CamOpenedSignal, this, &SingleLensReflexCameraWindow::onCamOpened);
+ connect(m_SingleLensReflexCameraOperation, &SingleLensReflexCameraOperation::CamClosedSignal, this, &SingleLensReflexCameraWindow::onCamClosed);
+
+ connect(m_SingleLensReflexCameraOperation, &SingleLensReflexCameraOperation::PlotSignal, this, &SingleLensReflexCameraWindow::PlotSLRImageSignal);
+ connect(m_SingleLensReflexCameraOperation, &SingleLensReflexCameraOperation::CamClosedSignal, this, &SingleLensReflexCameraWindow::SLRCamClosedSignal);
+}
+
+SingleLensReflexCameraWindow::~SingleLensReflexCameraWindow()
+{
+ m_SLRCameraThread->quit();
+ m_SLRCameraThread->wait();
+ delete m_SingleLensReflexCameraOperation;
+ m_SingleLensReflexCameraOperation = nullptr;
+}
+
+void SingleLensReflexCameraWindow::openSLRCamera()
+{
+ if (!m_SingleLensReflexCameraOperation->getRecordStatus())
+ {
+ emit openSLRCameraSignal();
+ }
+}
+
+void SingleLensReflexCameraWindow::onCamOpened()
+{
+ ui.openSLRCamera_btn->setEnabled(false);
+ ui.closeSLRCamera_btn->setEnabled(true);
+
+ ui.openSLRCamera_btn->setText(QString::fromLocal8Bit("已打开"));
+}
+
+void SingleLensReflexCameraWindow::closeSLRCamera()
+{
+ m_SingleLensReflexCameraOperation->CloseSLRCamera();
+}
+
+void SingleLensReflexCameraWindow::onCamClosed()
+{
+ ui.openSLRCamera_btn->setEnabled(true);
+ ui.closeSLRCamera_btn->setEnabled(false);
+
+ ui.openSLRCamera_btn->setText(QString::fromLocal8Bit("打 开"));
+}
+
+//-------------------------------------------------------------------------------------------------------------------------------
+SingleLensReflexCameraOperation::SingleLensReflexCameraOperation()
+{
+ m_func = nullptr;
+ record = false;
+}
+
+SingleLensReflexCameraOperation::~SingleLensReflexCameraOperation()
+{
+}
+
+void SingleLensReflexCameraOperation::OpenSLRCamera()
+{
+
+}
+
+void SingleLensReflexCameraOperation::OpenSLRCamera_callback()
+{
+
+}
+
+void SingleLensReflexCameraOperation::setCallback(void(*func)())
+{
+ m_func = func;
+}
+
+void SingleLensReflexCameraOperation::CloseSLRCamera()
+{
+ std::cout << "SingleLensReflexCameraOperation::CloseSLRCamera,关闭单反相机" << std::endl;
+
+ record = false;
+
+ emit CamClosedSignal();
+}
diff --git a/HPPA/SingleLensReflexCameraWindow.h b/HPPA/SingleLensReflexCameraWindow.h
new file mode 100644
index 0000000..43ac70f
--- /dev/null
+++ b/HPPA/SingleLensReflexCameraWindow.h
@@ -0,0 +1,76 @@
+#pragma once
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include "ui_SingleLensReflexCamera.h"
+#include "AppSettings.h"
+
+#include
+#include
+typedef void(*func)();
+
+class SingleLensReflexCameraOperation :public QObject
+{
+ Q_OBJECT
+
+public:
+ SingleLensReflexCameraOperation();
+ ~SingleLensReflexCameraOperation();
+
+ QImage m_colorImage;
+ QImage m_depthImage;
+ void setCallback(void(*func)());
+ bool getRecordStatus() const { return record; }
+
+private:
+ cv::Mat frame;
+
+ func m_func;
+
+ bool record;
+
+public slots:
+ void OpenSLRCamera();
+ void OpenSLRCamera_callback();//不使用信号而使用回调函数来通知界面刷新视频
+ void CloseSLRCamera();
+
+signals:
+ void PlotSignal();
+
+ void CamOpenedSignal();
+ void CamClosedSignal();
+};
+
+class SingleLensReflexCameraWindow : public QDialog
+{
+ Q_OBJECT
+
+public:
+ SingleLensReflexCameraWindow(QWidget* parent = nullptr);
+ ~SingleLensReflexCameraWindow();
+
+ SingleLensReflexCameraOperation* m_SingleLensReflexCameraOperation;
+
+public Q_SLOTS:
+ void openSLRCamera();
+ void onCamOpened();
+ void closeSLRCamera();
+ void onCamClosed();
+
+signals:
+ void openSLRCameraSignal();
+ void PlotSLRImageSignal();
+ void SLRCamClosedSignal();
+
+private:
+ Ui::SingleLensReflexCameraClass ui;
+ QThread* m_SLRCameraThread;
+
+};