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; + +};