#include "HyperImagerControl.h" HyperImagerControl::HyperImagerControl(QWidget* parent) : QDialog(parent) { ui.setupUi(this); connect(ui.framerate_spinBox, &QDoubleSpinBox::editingFinished, this, &HyperImagerControl::onFramerateSpinBoxEditingFinished); connect(ui.FramerateSlider, &QDoubleSlider::valueChanged, this, &HyperImagerControl::onFramerateSliderChanged); connect(ui.FramerateSlider, &QDoubleSlider::sliderReleased, this, &HyperImagerControl::onFramerateSliderReleased); connect(ui.integratioin_time_spinBox, &QDoubleSpinBox::editingFinished, this, &HyperImagerControl::onIntegrationTimeSpinBoxEditingFinished); connect(ui.IntegratioinTimeSlider, &QDoubleSlider::valueChanged, this, &HyperImagerControl::onIntegrationTimeSliderChanged); connect(ui.IntegratioinTimeSlider, &QDoubleSlider::sliderReleased, this, &HyperImagerControl::onIntegrationTimeSliderReleased); connect(ui.gain_spinBox, &QDoubleSpinBox::editingFinished, this, &HyperImagerControl::onGainSpinBoxEditingFinished); connect(ui.GainSlider, &QSlider::valueChanged, this, &HyperImagerControl::onGainSliderChanged); connect(ui.GainSlider, &QSlider::sliderReleased, this, &HyperImagerControl::onGainSliderReleased); ui.GainSlider->setMaximum(12); ui.GainSlider->setMinimum(0); ui.gain_spinBox->setMaximum(12); ui.gain_spinBox->setMinimum(0); ui.widget_3->setStyleSheet(R"( QDoubleSpinBox { border: 1px solid #999; border-radius: 4px; padding: 2px 20px 2px 6px; /* 右侧留空间给按钮 */ background: #0e1c4c; selection-background-color: #0078d7; font-size: 12px; color:#ACCDFF ; } QDoubleSpinBox::up-button { subcontrol-origin: border; subcontrol-position: top right; width: 16px; border-left: 1px solid #ccc; } QDoubleSpinBox::down-button { subcontrol-origin: border; subcontrol-position: bottom right; width: 16px; border-left: 1px solid #ccc; } QDoubleSpinBox::up-arrow { image: url(:/svg/resources/icons/svg/arrow_up.svg); width: 10px; height: 10px; } QDoubleSpinBox::down-arrow { image: url(:/svg/resources/icons/svg/arrow_down.svg); width: 10px; height: 10px; } QDoubleSpinBox::up-button:hover, QDoubleSpinBox::down-button:hover { background: #e6f2ff; } QDoubleSpinBox::up-button:pressed, QDoubleSpinBox::down-button:pressed { background: #cce4ff; } )"); } HyperImagerControl::~HyperImagerControl() { } void HyperImagerControl::setFrameRate(double frameRate) { ui.framerate_spinBox->setValue(frameRate); ui.FramerateSlider->setValue(frameRate); updateIntegrationTimeRange(frameRate); AppSettings::instance().setFrameRate(frameRate); } void HyperImagerControl::setIntegrationTime(double integrationTime) { ui.integratioin_time_spinBox->setValue(integrationTime); ui.IntegratioinTimeSlider->setValue(integrationTime); updateFramerateRange(integrationTime); AppSettings::instance().setIntegrationTime(integrationTime); } void HyperImagerControl::setGain(double gain) { ui.gain_spinBox->setValue(gain); ui.GainSlider->setValue(gain); AppSettings::instance().setGain(gain); } void HyperImagerControl::onFramerateSpinBoxEditingFinished() { double framerate = ui.framerate_spinBox->value(); ui.FramerateSlider->setValue(framerate); emit framerateChanged(framerate); } void HyperImagerControl::onFramerateSliderChanged(double framerate) { ui.framerate_spinBox->blockSignals(true); ui.framerate_spinBox->setValue(framerate); ui.framerate_spinBox->blockSignals(false); } void HyperImagerControl::onFramerateSliderReleased() { double framerate = ui.framerate_spinBox->value(); emit framerateChanged(framerate); } void HyperImagerControl::onIntegrationTimeSpinBoxEditingFinished() { double integrationTime = ui.integratioin_time_spinBox->value(); ui.IntegratioinTimeSlider->setValue(integrationTime); emit integrationTimeChanged(integrationTime); } void HyperImagerControl::onIntegrationTimeSliderChanged(double integrationTime) { ui.integratioin_time_spinBox->blockSignals(true); ui.integratioin_time_spinBox->setValue(integrationTime); ui.integratioin_time_spinBox->blockSignals(false); } void HyperImagerControl::onIntegrationTimeSliderReleased() { double integrationTime = ui.integratioin_time_spinBox->value(); emit integrationTimeChanged(integrationTime); } void HyperImagerControl::onGainSpinBoxEditingFinished() { double gain = ui.gain_spinBox->value(); ui.GainSlider->setValue(gain); emit gainChanged(gain); } void HyperImagerControl::onGainSliderChanged(double gain) { ui.gain_spinBox->blockSignals(true); ui.gain_spinBox->setValue(gain); ui.gain_spinBox->blockSignals(false); } void HyperImagerControl::onGainSliderReleased() { double gain = ui.gain_spinBox->value(); emit gainChanged(gain); } void HyperImagerControl::updateIntegrationTimeRange(double frameRate) { double maxIntegrationTime = 1.0 / frameRate * 999.0; // 毫秒 ui.IntegratioinTimeSlider->blockSignals(true); ui.IntegratioinTimeSlider->setMaximum(maxIntegrationTime); ui.IntegratioinTimeSlider->setMinimum(1); ui.IntegratioinTimeSlider->blockSignals(false); ui.integratioin_time_spinBox->blockSignals(true); ui.integratioin_time_spinBox->setMaximum(maxIntegrationTime); ui.integratioin_time_spinBox->setMinimum(1); ui.integratioin_time_spinBox->blockSignals(false); } void HyperImagerControl::updateFramerateRange(double integrationTime) { double maxFramerate = 1.0 / (integrationTime / 999.0); // 积分时间(毫秒)转帧率 if(maxFramerate > m_frameRateLimit) { maxFramerate = m_frameRateLimit; } ui.FramerateSlider->blockSignals(true); ui.FramerateSlider->setMaximum(maxFramerate); ui.FramerateSlider->setMinimum(1); ui.FramerateSlider->blockSignals(false); ui.framerate_spinBox->blockSignals(true); ui.framerate_spinBox->setMaximum(maxFramerate); ui.framerate_spinBox->setMinimum(1); ui.framerate_spinBox->blockSignals(false); }