diff --git a/HPPA/HPPA.cpp b/HPPA/HPPA.cpp index 7d630d6..0fc9da7 100644 --- a/HPPA/HPPA.cpp +++ b/HPPA/HPPA.cpp @@ -31,6 +31,8 @@ HPPA::HPPA(QWidget* parent) s_instance = this; ui.setupUi(this); + setWindowFlags(Qt::FramelessWindowHint); + // register MapLayer* metatype for queued signal/slot across threads qRegisterMetaType("MapLayer*"); @@ -635,6 +637,7 @@ void HPPA::initMenubarToolbar() hLayout_menuWidget->addStretch(); QPushButton* closeBtn = new QPushButton(QString::fromLocal8Bit("退出平台")); + connect(closeBtn, SIGNAL(released()), this, SLOT(onExit())); closeBtn->setStyleSheet(R"( QPushButton { background: #002CE0; @@ -655,7 +658,7 @@ void HPPA::initMenubarToolbar() //QToolBar* toolBar = this->findChild("mainToolBar"); QToolBar* toolBar = ui.mainToolBar; - //hLayout_toolBarWidget->addWidget(toolBar); + hLayout_toolBarWidget->addWidget(toolBar); toolBar->setAttribute(Qt::WA_TranslucentBackground, true); toolBar->setAutoFillBackground(false); toolBar->setIconSize(QSize(56, 56)); @@ -665,24 +668,96 @@ void HPPA::initMenubarToolbar() frame_number->setStyleSheet("QLineEdit{background-color:rgb(255,255,255);}"); frame_number->setMaximumWidth(100); frame_number->setText("5000"); + frame_number->setStyleSheet(R"( + 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; + } + QLineEdit:hover { + border: 1px solid #4d8dff; + } + + QLineEdit:focus { + border: 1px solid #6aa2ff; + background-color: #23345c; + } + )"); QAction* action = ui.mainToolBar->insertWidget(ui.action_start_recording, frame_number); m_FilenameLineEdit = new QLineEdit(ui.mainToolBar); m_FilenameLineEdit->setStyleSheet("QLineEdit{background-color:rgb(255,255,255);}"); m_FilenameLineEdit->setMaximumWidth(100); m_FilenameLineEdit->setText("tmp_image"); + m_FilenameLineEdit->setStyleSheet(R"( + 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; + } + QLineEdit:hover { + border: 1px solid #4d8dff; + } + + QLineEdit:focus { + border: 1px solid #6aa2ff; + background-color: #23345c; + } + )"); QAction* action1 = ui.mainToolBar->insertWidget(ui.action_start_recording, m_FilenameLineEdit); - ui.action_connect_imager->setIcon(QIcon(".//icon//all//connect_imager.png")); - ui.action_auto_exposure->setIcon(QIcon(".//icon//all//exposure.png")); -ui.action_focus->setIcon(QIcon(".//icon//all//focus.png")); -ui.action_dark->setIcon(QIcon(".//icon//all//dark.png")); - ui.action_reference->setIcon(QIcon(".//icon//all//reference.png")); + QWidget* spacer = new QWidget(); + spacer->setFixedWidth(10); // 间距大小自己调 + ui.mainToolBar->insertWidget(action1, spacer); + + + QAction* sepAction = ui.mainToolBar->insertSeparator(ui.mActionPan); + QWidget* sepWidget = ui.mainToolBar->widgetForAction(sepAction); + if (sepWidget) { + //sepWidget->setFixedWidth(15); // 调整宽度 + sepWidget->setStyleSheet("background-color: #2C586C;"); // 调整颜色 + } + + ui.action_connect_imager->setIcon(QIcon(".//icon//all//connect_imager.svg")); + ui.action_auto_exposure->setIcon(QIcon(".//icon//all//exposure.svg")); + ui.action_focus->setIcon(QIcon(".//icon//all//focus.svg")); + ui.action_dark->setIcon(QIcon(".//icon//all//dark.svg")); + ui.action_reference->setIcon(QIcon(".//icon//all//reference.svg")); + ui.action_start_recording->setIcon(QIcon(".//icon//all//record.svg")); + ui.actionOpenDirectory->setIcon(QIcon(".//icon//all//openDirectory.svg")); + + ui.mActionPan->setIcon(QIcon(".//icon//all//pan.svg")); + ui.mActionSpectral->setIcon(QIcon(".//icon//all//spectral.svg")); + + connect(ui.mActionPan, &QAction::toggled, this, [=](bool checked) { + if (checked) + ui.mActionPan->setIcon(QIcon(".//icon//all//pan_done.svg")); + else + ui.mActionPan->setIcon(QIcon(".//icon//all//pan.svg")); + }); + + connect(ui.mActionSpectral, &QAction::toggled, this, [=](bool checked) { + if (checked) + ui.mActionSpectral->setIcon(QIcon(".//icon//all//spectral_done.svg")); + else + ui.mActionSpectral->setIcon(QIcon(".//icon//all//spectral.svg")); + }); + // 使用样式表设置透明背景 toolBar->setStyleSheet(R"( QToolBar { background: #0D1233;/*transparent*/ - border: 1px solid #444; + border: 1px solid #2C586C; border-radius: 6px; } QToolButton { @@ -700,7 +775,7 @@ ui.action_dark->setIcon(QIcon(".//icon//all//dark.png")); topWidget->setStyleSheet("background-color: #040125;"); QVBoxLayout* verticalLayout_topWidget = new QVBoxLayout(topWidget); verticalLayout_topWidget->addWidget(menuWidget); - //verticalLayout_topWidget->addWidget(toolBarWidget); + verticalLayout_topWidget->addWidget(toolBarWidget); setMenuWidget(topWidget); } @@ -771,7 +846,8 @@ void HPPA::recordFromRobotArm(int fileCounter) m_Imager->setRecordControlState(false); ui.action_start_recording->setText(QString::fromLocal8Bit("采集")); - ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); + ui.action_start_recording->setIcon(QIcon(".//icon//all//record_done.svg")); + //ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); //qDebug() << "recordFromRobotArm: 1111111111111111111111"; return; @@ -787,7 +863,8 @@ void HPPA::recordFromRobotArm(int fileCounter) emit StartRecordSignal(); ui.action_start_recording->setText(QString::fromLocal8Bit("采集中")); - ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(255,0,0);}"); + ui.action_start_recording->setIcon(QIcon(".//icon//all//record_ing.svg")); + //ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(255,0,0);}"); //qDebug() << "recordFromRobotArm: 2222222222222222222222"; } @@ -1214,7 +1291,8 @@ void HPPA::onStartRecordStep1() emit StartRecordSignal();//发射开始采集信号 ui.action_start_recording->setText(QString::fromLocal8Bit("停止采集")); - ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(255,0,0);}"); + ui.action_start_recording->setIcon(QIcon(".//icon//all//record_ing.svg")); + //ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(255,0,0);}"); } else { @@ -1222,7 +1300,8 @@ void HPPA::onStartRecordStep1() m_RecordState -= 1; ui.action_start_recording->setText(QString::fromLocal8Bit("采集")); - ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); + ui.action_start_recording->setIcon(QIcon(".//icon//all//record_done.svg")); + //ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); } return; } @@ -1236,7 +1315,8 @@ void HPPA::onStartRecordStep1() removeAllLayersInRasterGroup(); ui.action_start_recording->setText(QString::fromLocal8Bit("停止采集")); - ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(255,0,0);}"); + ui.action_start_recording->setIcon(QIcon(".//icon//all//record_ing.svg")); + //ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(255,0,0);}"); //应该先控制马达运动,当马达运动后,再开始光谱仪采集(发射开始采集信号) m_Imager->setFileName2Save(imgPath); @@ -1247,10 +1327,11 @@ void HPPA::onStartRecordStep1() else { m_omc->stop(); - m_RecordState -= 1; + m_RecordState -= 1; - ui.action_start_recording->setText(QString::fromLocal8Bit("采集")); - ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); + ui.action_start_recording->setText(QString::fromLocal8Bit("采集")); + ui.action_start_recording->setIcon(QIcon(".//icon//all//record_done.svg")); + //ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); } return; } @@ -1270,7 +1351,8 @@ void HPPA::onStartRecordStep1() m_tmc->run(); ui.action_start_recording->setText(QString::fromLocal8Bit("停止采集")); - ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(255,0,0);}"); + ui.action_start_recording->setIcon(QIcon(".//icon//all//record_ing.svg")); + //ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(255,0,0);}"); } else { @@ -1279,7 +1361,8 @@ void HPPA::onStartRecordStep1() m_RecordState--; ui.action_start_recording->setText(QString::fromLocal8Bit("采集")); - ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); + ui.action_start_recording->setIcon(QIcon(".//icon//all//record_done.svg")); + //ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); } return; @@ -1588,6 +1671,27 @@ void HPPA::onExit() this->close(); } +void HPPA::closeEvent(QCloseEvent* event) +{ + QMessageBox::StandardButton ret; + + ret = QMessageBox::question( + this, + QString::fromLocal8Bit("退出确认"), + QString::fromLocal8Bit("确定要退出程序吗?"), + QMessageBox::Yes | QMessageBox::No + ); + + if (ret == QMessageBox::Yes) + { + event->accept(); // 允许关闭 + } + else + { + event->ignore(); // 取消关闭 + } +} + void HPPA::onOpenImg() { // 1) 弹出文件对话框获取uri @@ -1648,16 +1752,22 @@ void HPPA::onconnect() return; } + ui.action_connect_imager->setIcon(QIcon(".//icon//all//connect_imager_ing.svg")); + m_Imager->moveToThread(m_RecordThread); m_RecordThread->start(); - m_Imager->connect_imager(frame_number->text().toInt()); - m_Imager->setFileName2Save(m_FilenameLineEdit->text().toStdString()); + connect(m_Imager, SIGNAL(PlotSignal(int, int, QString)), this, SLOT(onPlotHyperspectralImageRgbImage(int, int, QString))); connect(m_Imager, SIGNAL(RecordFinishedSignal_WhenFrameNumberMeet()), this, SLOT(onRecordFinishedSignal_WhenFrameNumberMeet())); connect(m_Imager, SIGNAL(RecordFinishedSignal_WhenFrameNumberNotMeet()), this, SLOT(onRecordFinishedSignal_WhenFrameNumberNotMeet())); connect(m_Imager, SIGNAL(SpectralSignal(int)), this, SLOT(PlotSpectral(int))); - //connect(m_Imager, SIGNAL(testImagerStatus()), this, SLOT(testImagerStatus())); + + connect(m_Imager, SIGNAL(testImagerStatus()), this, SLOT(testImagerStatus())); + 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(); @@ -1729,6 +1839,8 @@ void HPPA::onconnect() } catch (std::exception const& e) { + ui.action_connect_imager->setIcon(QIcon(".//icon//all//connect_imager.svg")); + std::cerr << "Error: " << e.what() << std::endl; delete m_Imager; @@ -1745,19 +1857,25 @@ void HPPA::onconnect() void HPPA::testImagerStatus() { - m_TestImagerStausThread->start(); + ui.action_connect_imager->setIcon(QIcon(".//icon//all//connect_imager_done.svg")); + //m_TestImagerStausThread->start(); +} + +void HPPA::autoExposureFinished() +{ + ui.action_auto_exposure->setIcon(QIcon(".//icon//all//exposure_done.svg")); } void HPPA::onAutoExposure() { + ui.action_auto_exposure->setIcon(QIcon(".//icon//all//exposure_ing.svg")); + double ReturnedExposureTime = m_Imager->auto_exposure(); //将自动曝光所得的值显示到界面 ui.IntegratioinTimeSlider->setValue(ReturnedExposureTime, false); - - ui.mainToolBar->widgetForAction(ui.action_auto_exposure)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); - //ui.mainToolBar->widgetForAction(ui.action_auto_exposure)->setStyleSheet("QLineEdit{background-color:rgb(255,255,255);}"); + //ui.mainToolBar->widgetForAction(ui.action_auto_exposure)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); } void HPPA::onFocus1() @@ -1812,6 +1930,8 @@ void HPPA::onDark() msgBox.setText(QString::fromLocal8Bit("采集暗电流,请确保镜头盖盖上!")); msgBox.exec(); + ui.action_dark->setIcon(QIcon(".//icon//all//dark_ing.svg")); + QAction* checked = moveplatformActionGroup->checkedAction(); QString checkedName = checked->objectName(); if (checkedName == "mAction_is_no_motor" || checkedName == "mAction_RobotArm") @@ -1833,14 +1953,17 @@ void HPPA::onDark() void HPPA::recordDarkFinish() { - ui.mainToolBar->widgetForAction(ui.action_dark)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); + ui.action_dark->setIcon(QIcon(".//icon//all//dark_done.svg")); + //ui.mainToolBar->widgetForAction(ui.action_dark)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); } void HPPA::onReference() { QMessageBox msgBox; msgBox.setText(QString::fromLocal8Bit("请确保白板放置正确!")); - msgBox.exec(); + msgBox.exec(); + + ui.action_reference->setIcon(QIcon(".//icon//all//reference_ing.svg")); QAction* checked = moveplatformActionGroup->checkedAction(); QString checkedName = checked->objectName(); @@ -1863,7 +1986,8 @@ void HPPA::onReference() void HPPA::recordWhiteFinish() { - ui.mainToolBar->widgetForAction(ui.action_reference)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); + ui.action_reference->setIcon(QIcon(".//icon//all//reference_done.svg")); + //ui.mainToolBar->widgetForAction(ui.action_reference)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); } void HPPA::onPlotHyperspectralImageRgbImage(int fileNumber, int frameNumber, QString filePath) @@ -2000,7 +2124,8 @@ void HPPA::onRecordFinishedSignal_WhenFrameNumberMeet() std::cout << "停止采集原因:帧数采集完了。" << std::endl; ui.action_start_recording->setText(QString::fromLocal8Bit("采集")); - ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); + ui.action_start_recording->setIcon(QIcon(".//icon//all//record_done.svg")); + //ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); m_RecordState++;//当自动停止采集 } @@ -2023,7 +2148,8 @@ void HPPA::onRecordFinishedSignal_WhenFrameNumberNotMeet() std::cout << "停止采集原因:(1)帧数没有采集够时,马达到达最大位置;(2)手动停止采集。" << std::endl; ui.action_start_recording->setText(QString::fromLocal8Bit("采集")); - ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); + ui.action_start_recording->setIcon(QIcon(".//icon//all//record_done.svg")); + //ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); m_RecordState++; } @@ -2031,7 +2157,8 @@ void HPPA::onRecordFinishedSignal_WhenFrameNumberNotMeet() void HPPA::onsequenceComplete() { ui.action_start_recording->setText(QString::fromLocal8Bit("采集")); - ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); + ui.action_start_recording->setIcon(QIcon(".//icon//all//record_done.svg")); + //ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); m_RecordState++; } diff --git a/HPPA/HPPA.h b/HPPA/HPPA.h index 6bf33b4..fed1dc5 100644 --- a/HPPA/HPPA.h +++ b/HPPA/HPPA.h @@ -296,6 +296,7 @@ public Q_SLOTS: void onOpenImg(); void onconnect();//连接相机 void testImagerStatus();//获取相机状态:连接是否正常 + void autoExposureFinished(); void onAutoExposure(); void onFocus1(); void onFocus2(int command); @@ -351,6 +352,9 @@ public Q_SLOTS: void onMapToolPanTriggered(); void onMapToolSpectralTriggered(); +protected: + void closeEvent(QCloseEvent* event) override; + signals: void StartFocusSignal(); void StartRecordSignal(); diff --git a/HPPA/HPPA.ui b/HPPA/HPPA.ui index 7c2dc08..441f59e 100644 --- a/HPPA/HPPA.ui +++ b/HPPA/HPPA.ui @@ -197,16 +197,14 @@ QToolBar QToolButton:hover { + + QStatusBar { - - background-color: rgb(255, 255, 255); - color: white; /* 文字颜色 */ - border-top: 1px solid #ccc; /* 顶部边框 */ - padding: 5px; /* 内边距 */ -} + background-color: #0D1233; + } @@ -816,18 +814,83 @@ QPushButton:pressed - + + + + 20 + 0 + + - 图像查看 + toolBar + + + QToolBar { + background: #040125;/*transparent*/ + border: 1px solid #040125; +} + + + false - TopToolBarArea + LeftToolBarArea + + + false + + + + + + 20 + 0 + + + + toolBar_2 + + + QToolBar { + background: #040125;/*transparent*/ + border: 1px solid #040125; +} + + + false + + + RightToolBarArea + + + false + + + + + + 0 + 20 + + + + toolBar_3 + + + QToolBar { + background: #040125;/*transparent*/ + border: 1px solid #040125; +} + + + false + + + BottomToolBarArea false - - diff --git a/HPPA/ImagerOperationBase.cpp b/HPPA/ImagerOperationBase.cpp index 22c707f..6c7b345 100644 --- a/HPPA/ImagerOperationBase.cpp +++ b/HPPA/ImagerOperationBase.cpp @@ -67,6 +67,8 @@ double ImagerOperationBase::auto_exposure() imagerStopCollect(); + emit autoExposureSignal(); + //std::cout << "Զع⣺" << getIntegrationTime() << std::endl; return getIntegrationTime(); diff --git a/HPPA/ImagerOperationBase.h b/HPPA/ImagerOperationBase.h index bc1f88f..d5f94d5 100644 --- a/HPPA/ImagerOperationBase.h +++ b/HPPA/ImagerOperationBase.h @@ -114,6 +114,7 @@ signals: void testImagerStatus();//ʾԲ״̬Ƿӣӳ + void autoExposureSignal(); // һӰļ.bil/.hdrдɺ󷢳Ӳɼ̷߳Qt queued connection void ImageFileSaved(const QString& path, int fileIndex); diff --git a/HPPA/imgControl.ui b/HPPA/imgControl.ui index 10e2da9..fc90f40 100644 --- a/HPPA/imgControl.ui +++ b/HPPA/imgControl.ui @@ -14,7 +14,56 @@ Color Adjust - QLabel { + 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; +} + +QLabel { color: rgb(255, 255, 255); } @@ -185,15 +234,15 @@ QSlider::handle:horizontal:pressed { 预设 - - + + 真彩色 - + 假彩色