Compare commits
2 Commits
3.0.0
...
ea1a666619
| Author | SHA1 | Date | |
|---|---|---|---|
| ea1a666619 | |||
| 50989bcd5b |
25
HPPA/AppSettings.cpp
Normal file
25
HPPA/AppSettings.cpp
Normal file
@ -0,0 +1,25 @@
|
||||
#include "AppSettings.h"
|
||||
|
||||
const QString AppSettings::kDefaultDataFolder = QStringLiteral("C:\\HPPA_image");
|
||||
|
||||
AppSettings::AppSettings()
|
||||
: m_settings(QSettings::IniFormat, QSettings::UserScope,
|
||||
QStringLiteral("IRIS"), QStringLiteral("HPPA"))
|
||||
{
|
||||
}
|
||||
|
||||
AppSettings& AppSettings::instance()
|
||||
{
|
||||
static AppSettings s;
|
||||
return s;
|
||||
}
|
||||
|
||||
QString AppSettings::dataFolder() const
|
||||
{
|
||||
return m_settings.value("General/DataFolder", kDefaultDataFolder).toString();
|
||||
}
|
||||
|
||||
void AppSettings::setDataFolder(const QString& path)
|
||||
{
|
||||
m_settings.setValue("General/DataFolder", path);
|
||||
}
|
||||
26
HPPA/AppSettings.h
Normal file
26
HPPA/AppSettings.h
Normal file
@ -0,0 +1,26 @@
|
||||
#pragma once
|
||||
|
||||
#include <QSettings>
|
||||
#include <QString>
|
||||
|
||||
class AppSettings
|
||||
{
|
||||
public:
|
||||
static AppSettings& instance();
|
||||
|
||||
// 数据路径
|
||||
QString dataFolder() const;
|
||||
void setDataFolder(const QString& path);
|
||||
|
||||
// 在此处添加更多参数的 getter/setter ...
|
||||
|
||||
private:
|
||||
AppSettings();
|
||||
AppSettings(const AppSettings&) = delete;
|
||||
AppSettings& operator=(const AppSettings&) = delete;
|
||||
|
||||
QSettings m_settings;
|
||||
|
||||
// 默认值
|
||||
static const QString kDefaultDataFolder;
|
||||
};
|
||||
@ -107,6 +107,7 @@ HPPA::HPPA(QWidget* parent)
|
||||
initPanelToolbar();
|
||||
|
||||
setDockNestingEnabled(true);
|
||||
connect(this->ui.mSetting, SIGNAL(triggered()), this, SLOT(settingWindow()));
|
||||
connect(this->ui.action_about, SIGNAL(triggered()), this, SLOT(onAbout()));
|
||||
connect(this->ui.mActionOneMotorScenario, SIGNAL(triggered()), this, SLOT(createOneMotorScenario()));
|
||||
connect(this->ui.mActionPlantPhenotypeScenario, SIGNAL(triggered()), this, SLOT(createPlantPhenotypeScenario()));
|
||||
@ -1954,6 +1955,13 @@ void HPPA::onAbout()
|
||||
about.exec();
|
||||
}
|
||||
|
||||
void HPPA::settingWindow()
|
||||
{
|
||||
setWindow w;
|
||||
w.show();
|
||||
w.exec();
|
||||
}
|
||||
|
||||
void HPPA::onDark()
|
||||
{
|
||||
QMessageBox msgBox;
|
||||
|
||||
@ -73,6 +73,8 @@
|
||||
|
||||
#include "recordFrameCounter.h"
|
||||
|
||||
#include "setWindow.h"
|
||||
|
||||
#define PI 3.1415926
|
||||
|
||||
QT_CHARTS_USE_NAMESPACE//QChartView 使用 需要加宏, 否则无法使用
|
||||
@ -313,6 +315,7 @@ public Q_SLOTS:
|
||||
void onFocus2(int command);
|
||||
void onFocusWindowClosed();
|
||||
void onAbout();
|
||||
void settingWindow();
|
||||
void onDark();
|
||||
void recordDarkFinish();
|
||||
void onReference();
|
||||
|
||||
@ -72,7 +72,7 @@ color:white;
|
||||
</property>
|
||||
<addaction name="mActionOpenImg"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_11"/>
|
||||
<addaction name="mSetting"/>
|
||||
<addaction name="action_exit"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menuspectrometer">
|
||||
@ -797,7 +797,7 @@ QPushButton:pressed
|
||||
<string>关闭影像</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_11">
|
||||
<action name="mSetting">
|
||||
<property name="text">
|
||||
<string>设置</string>
|
||||
</property>
|
||||
|
||||
@ -108,6 +108,7 @@
|
||||
<ItemGroup>
|
||||
<ClCompile Include="aboutWindow.cpp" />
|
||||
<ClCompile Include="adjustTable.cpp" />
|
||||
<ClCompile Include="AppSettings.cpp" />
|
||||
<ClCompile Include="AspectRatioLabel.cpp" />
|
||||
<ClCompile Include="CaptureCoordinator.cpp" />
|
||||
<ClCompile Include="Carousel.cpp" />
|
||||
@ -145,6 +146,7 @@
|
||||
<ClCompile Include="ResononNirImager.cpp" />
|
||||
<ClCompile Include="RgbCameraOperation.cpp" />
|
||||
<ClCompile Include="RobotArmControl.cpp" />
|
||||
<ClCompile Include="setWindow.cpp" />
|
||||
<ClCompile Include="stdafx.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
||||
@ -178,6 +180,7 @@
|
||||
<QtUic Include="RadianceConversion.ui" />
|
||||
<QtUic Include="ReflectanceConversion.ui" />
|
||||
<QtUic Include="RobotArmControl.ui" />
|
||||
<QtUic Include="set.ui" />
|
||||
<QtUic Include="twoMotorControl.ui" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
@ -202,6 +205,7 @@
|
||||
<QtMoc Include="imageControl.h" />
|
||||
<QtMoc Include="AspectRatioLabel.h" />
|
||||
<QtMoc Include="HyperImagerControl.h" />
|
||||
<ClInclude Include="AppSettings.h" />
|
||||
<ClInclude Include="imager_base.h" />
|
||||
<ClInclude Include="irisximeaimager.h" />
|
||||
<QtMoc Include="OneMotorControl.h" />
|
||||
@ -224,6 +228,7 @@
|
||||
<ClInclude Include="RasterDataProvider.h" />
|
||||
<ClInclude Include="RasterRenderer.h" />
|
||||
<QtMoc Include="recordFrameCounter.h" />
|
||||
<QtMoc Include="setWindow.h" />
|
||||
<ClInclude Include="utility_tc.h" />
|
||||
<QtMoc Include="aboutWindow.h" />
|
||||
<ClInclude Include="hppaConfigFile.h" />
|
||||
|
||||
@ -199,6 +199,12 @@
|
||||
<ClCompile Include="recordFrameCounter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="setWindow.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="AppSettings.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<QtMoc Include="fileOperation.h">
|
||||
@ -324,6 +330,9 @@
|
||||
<QtMoc Include="recordFrameCounter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</QtMoc>
|
||||
<QtMoc Include="setWindow.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</QtMoc>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="imageProcessor.h">
|
||||
@ -365,6 +374,9 @@
|
||||
<ClInclude Include="LayerTreeView.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="AppSettings.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<QtUic Include="FocusDialog.ui">
|
||||
@ -403,6 +415,9 @@
|
||||
<QtUic Include="hyperImagerControl.ui">
|
||||
<Filter>Form Files</Filter>
|
||||
</QtUic>
|
||||
<QtUic Include="set.ui">
|
||||
<Filter>Form Files</Filter>
|
||||
</QtUic>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="cpp.hint" />
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#include "ImagerOperationBase.h"
|
||||
#include "ImagerOperationBase.h"
|
||||
|
||||
ImagerOperationBase::ImagerOperationBase()
|
||||
{
|
||||
@ -44,11 +44,11 @@ void ImagerOperationBase::connect_imager(int frameNumber)
|
||||
|
||||
double ImagerOperationBase::auto_exposure()
|
||||
{
|
||||
//<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ʱ<EFBFBD><EFBFBD>Ϊ<EFBFBD>ڵ<EFBFBD>ǰ֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double x = 1 / getFramerate() * 1000;//<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ʱ<EFBFBD><EFBFBD>
|
||||
//第一步:先设置曝光时间为在当前帧率情况下最大
|
||||
double x = 1 / getFramerate() * 1000;//获取最大毫秒曝光时间
|
||||
setIntegrationTime(x);
|
||||
|
||||
//<EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD>Ѱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ʱ<EFBFBD><EFBFBD>
|
||||
//第二步:通过循环寻找最佳曝光时间
|
||||
imagerStartCollect();
|
||||
|
||||
while (true)
|
||||
@ -57,7 +57,7 @@ double ImagerOperationBase::auto_exposure()
|
||||
if (GetMaxValue(buffer, m_FrameSize) >= 4094)
|
||||
{
|
||||
setIntegrationTime(getIntegrationTime() * 0.95);
|
||||
std::cout << "<EFBFBD>Զ<EFBFBD><EFBFBD>ع<EFBFBD>-----------" << std::endl;
|
||||
std::cout << "自动曝光-----------" << std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -69,7 +69,7 @@ double ImagerOperationBase::auto_exposure()
|
||||
|
||||
emit autoExposureSignal();
|
||||
|
||||
//std::cout << "<EFBFBD>Զ<EFBFBD><EFBFBD>ع⣺" << getIntegrationTime() << std::endl;
|
||||
//std::cout << "自动曝光:" << getIntegrationTime() << std::endl;
|
||||
|
||||
return getIntegrationTime();
|
||||
}
|
||||
@ -79,7 +79,7 @@ void ImagerOperationBase::focus()
|
||||
m_iFocusFramesNumber = 0;
|
||||
|
||||
m_iFocusFrameCounter = 1;
|
||||
//std::cout << "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>-----------" << std::endl;
|
||||
//std::cout << "调焦-----------" << std::endl;
|
||||
|
||||
double tmpFrmerate = getFramerate();
|
||||
double tmpIntegrationTime = getIntegrationTime();
|
||||
@ -87,7 +87,7 @@ void ImagerOperationBase::focus()
|
||||
|
||||
setFramerate(5);
|
||||
auto_exposure();
|
||||
std::cout << "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD>ع<EFBFBD>ʱ<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>" << getIntegrationTime() << std::endl;
|
||||
std::cout << "调焦获得的曝光时间为:" << getIntegrationTime() << std::endl;
|
||||
|
||||
int iWidth, iHeight;
|
||||
GetFrameSize(iWidth, iHeight);
|
||||
@ -99,7 +99,7 @@ void ImagerOperationBase::focus()
|
||||
m_bFocusControlState = true;
|
||||
while (m_bFocusControlState)
|
||||
{
|
||||
////<EFBFBD><EFBFBD>֡ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
////多帧平均,减弱单帧跳动
|
||||
//memset((void*)buffer, 0, m_FrameSize * sizeof(unsigned short));
|
||||
//int fn = 5;
|
||||
//for (int i = 0; i < fn; i++)
|
||||
@ -123,7 +123,7 @@ void ImagerOperationBase::focus()
|
||||
|
||||
double focusIndex = calcFocusIndexSobelPrivate(buffer);
|
||||
emit FocusIndexSobelSignal(focusIndex);
|
||||
std::cout << "focusIndex<EFBFBD><EFBFBD>" << focusIndex << std::endl;
|
||||
std::cout << "focusIndex:" << focusIndex << std::endl;
|
||||
|
||||
emit SpectralSignal(1);
|
||||
|
||||
@ -140,7 +140,7 @@ void ImagerOperationBase::focus()
|
||||
|
||||
void ImagerOperationBase::record_dark()
|
||||
{
|
||||
std::cout << "<EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" << std::endl;
|
||||
std::cout << "采集暗电流!!!!!!!!!" << std::endl;
|
||||
imagerStartCollect();
|
||||
|
||||
unsigned int* dark_tmp = new unsigned int[m_FrameSize];
|
||||
@ -172,7 +172,7 @@ void ImagerOperationBase::record_dark()
|
||||
|
||||
void ImagerOperationBase::record_white()
|
||||
{
|
||||
std::cout << "<EFBFBD>ɼ<EFBFBD><EFBFBD>װ壡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" << std::endl;
|
||||
std::cout << "采集白板!!!!!!!!!" << std::endl;
|
||||
imagerStartCollect();
|
||||
|
||||
unsigned int* white_tmp = new unsigned int[m_FrameSize];
|
||||
@ -197,7 +197,7 @@ void ImagerOperationBase::record_white()
|
||||
|
||||
imagerStopCollect();
|
||||
|
||||
//<EFBFBD>װ<EFBFBD><EFBFBD>۰<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//白板扣暗电流
|
||||
if (m_HasDark)
|
||||
{
|
||||
for (size_t i = 0; i < m_FrameSize; i++)
|
||||
@ -225,17 +225,17 @@ void ImagerOperationBase::start_record()
|
||||
//std::cout << "------------------------------------------------------" << std::endl;
|
||||
|
||||
m_iFrameCounter = 0;
|
||||
m_RgbImage->m_iFrameCounter = 0;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>rgbͼ<EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>0<EFBFBD><EFBFBD>
|
||||
m_RgbImage->m_iFrameCounter = 0;//设置填充rgb图像的第0行
|
||||
m_bRecordControlState = true;
|
||||
|
||||
//<EFBFBD>ж<EFBFBD><EFBFBD>ڴ<EFBFBD>buffer<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//判断内存buffer是否正常分配
|
||||
if (buffer == 0)
|
||||
{
|
||||
std::cerr << "Error: memory could not be allocated for datacube";
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
// <EFBFBD>ڿ<EFBFBD>ʼ<EFBFBD>ɼ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>UI <20><><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD> MapLayer <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 在开始采集时仅发出文件信息,UI 层自行创建 MapLayer 并管理生命周期
|
||||
// prepare file name that will be used for saving
|
||||
m_FileName2Save2 = m_FileName2Save + "_" + std::to_string(m_FileSavedCounter) + ".bil";
|
||||
QString baseName = QString::fromStdString(getFileNameFromPath(m_FileName2Save2));
|
||||
@ -258,7 +258,7 @@ void ImagerOperationBase::start_record()
|
||||
getFrame(buffer);
|
||||
long long timeOs = getNanosecondsSinceMidnight();
|
||||
|
||||
//<EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӦΪbuffer<EFBFBD><EFBFBD>dark<EFBFBD><EFBFBD><EFBFBD><EFBFBD>unsigned short<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD>dark>bufferʱ<EFBFBD><EFBFBD>buffer-dark=65535
|
||||
//减去暗电流,应为buffer和dark都是unsigned short,所以当dark>buffer时,buffer-dark=65535
|
||||
if (m_HasDark)
|
||||
{
|
||||
for (size_t i = 0; i < m_FrameSize; i++)
|
||||
@ -276,12 +276,12 @@ void ImagerOperationBase::start_record()
|
||||
}
|
||||
|
||||
|
||||
//ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//转反射率
|
||||
if (m_HasWhite)
|
||||
{
|
||||
for (size_t i = 0; i < m_FrameSize; i++)
|
||||
{
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ壩Ϊ0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//处理除数(白板)为0的情况
|
||||
if (white[i] != 0)
|
||||
{
|
||||
pixelValueTmp = buffer[i];
|
||||
@ -299,12 +299,12 @@ void ImagerOperationBase::start_record()
|
||||
x = fwrite(buffer, 2, m_FrameSize, m_fImage);
|
||||
fprintf(hTimesFile, "%d\n", timeOs);
|
||||
|
||||
//<EFBFBD><EFBFBD>rgb<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
|
||||
//将rgb波段提取出来,以便在界面中显示
|
||||
m_RgbImage->FillRgbImage(buffer);//??????????????????????????????????????????????????????????????????????????????????????????????????????
|
||||
|
||||
//std::cout << "<EFBFBD><EFBFBD>" << m_iFrameCounter << "֡д<EFBFBD><EFBFBD>" << x << "<EFBFBD><EFBFBD>unsigned short<EFBFBD><EFBFBD>" << std::endl;
|
||||
//std::cout << "第" << m_iFrameCounter << "帧写了" << x << "个unsigned short。" << std::endl;
|
||||
|
||||
//ÿ<EFBFBD><EFBFBD>1s<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ν<EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD>
|
||||
//每隔1s进行一次界面图形绘制
|
||||
if (m_iFrameCounter % (int)getFramerate() == 0)
|
||||
{
|
||||
emit PlotSignal(m_FileSavedCounter, m_iFrameCounter, filePath);
|
||||
@ -318,15 +318,15 @@ void ImagerOperationBase::start_record()
|
||||
}
|
||||
imagerStopCollect();
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>λ<EFBFBD>ͼǰ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//在最后一次画图前需要进行一次拉伸
|
||||
//m_RgbImage
|
||||
emit PlotSignal(m_FileSavedCounter, -1, filePath);
|
||||
|
||||
m_bRecordControlState = false;
|
||||
WriteHdr();
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ImageFileSaved <EFBFBD>źţ<EFBFBD>֪ͨ UI <20><><EFBFBD>Ѹ<EFBFBD><D1B8>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// m_FileName2Save2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˱<EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD> .bil <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "tmp_image_0.bil"<EFBFBD><EFBFBD>
|
||||
// 发射 ImageFileSaved 信号,通知 UI 层把该文件加入图层管理器
|
||||
// m_FileName2Save2 保存了本次写入的 .bil 文件名(例如 "tmp_image_0.bil")
|
||||
emit ImageFileSaved(QString::fromStdString(m_FileName2Save2), m_FileSavedCounter);
|
||||
|
||||
m_FileSavedCounter++;
|
||||
@ -397,7 +397,7 @@ double ImagerOperationBase::calcFocusIndexSobelPrivate(void* pvData)
|
||||
unsigned short* psData;
|
||||
psData = (unsigned short*)pvData;
|
||||
|
||||
cv::Mat gray(iHeight, iWidth, CV_16UC1, psData);//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD>gray.data<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD>psDataһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
cv::Mat gray(iHeight, iWidth, CV_16UC1, psData);//经验证,gray.data的数据和psData一样;
|
||||
/*string rgbFilePathNoStrech = "E:\\hppa\\delete\\focusImg_";
|
||||
string tmp1 = std::to_string(m_iFocusFramesNumber);
|
||||
string tmp2 = ".png";*/
|
||||
@ -407,7 +407,7 @@ double ImagerOperationBase::calcFocusIndexSobelPrivate(void* pvData)
|
||||
//cv::imwrite(rgbFilePathNoStrech, gray);
|
||||
m_iFocusFramesNumber++;
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD>
|
||||
//进行滤波
|
||||
//cv::Mat outputImage;
|
||||
//cv::Size kernelSize(5, 5);
|
||||
//double sigmaX = 1.5;
|
||||
@ -417,7 +417,7 @@ double ImagerOperationBase::calcFocusIndexSobelPrivate(void* pvData)
|
||||
|
||||
cv::Mat gradX, gradY, absGradX, absGradY;
|
||||
|
||||
cv::Sobel(outputImage, gradX, CV_32F, 1, 0);//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪCV_16S<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>cv::magnitude<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
cv::Sobel(outputImage, gradX, CV_32F, 1, 0);//如果参数为CV_16S,则函数cv::magnitude报错
|
||||
cv::Sobel(outputImage, gradY, CV_32F, 0, 1);
|
||||
cv::convertScaleAbs(gradX, absGradX);
|
||||
cv::convertScaleAbs(gradY, absGradY);
|
||||
@ -426,7 +426,7 @@ double ImagerOperationBase::calcFocusIndexSobelPrivate(void* pvData)
|
||||
|
||||
cv::Mat magnitude, direction;
|
||||
cv::magnitude(gradX, gradY, magnitude);//
|
||||
cv::phase(gradX, gradY, direction, true); // true<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>ؽǶȶ<EFBFBD><EFBFBD>ǻ<EFBFBD><EFBFBD><EFBFBD>
|
||||
cv::phase(gradX, gradY, direction, true); // true表示返回角度而非弧度
|
||||
|
||||
|
||||
return cv::mean(magnitude)[0];
|
||||
@ -479,23 +479,23 @@ int ImagerOperationBase::getFocusFrameCounter() const
|
||||
|
||||
void ImagerOperationBase::set_buffer()
|
||||
{
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//如果
|
||||
if (buffer != nullptr)
|
||||
{
|
||||
std::cout << "<EFBFBD>ͷŶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>" << std::endl;
|
||||
std::cout << "释放堆上内存" << std::endl;
|
||||
free(buffer);
|
||||
}
|
||||
|
||||
m_FrameSize = getBandCount() * getSampleCount();
|
||||
//std::cout << "m_FrameSize<EFBFBD><EFBFBD>СΪ" << m_FrameSize << std::endl;
|
||||
//std::cout << "m_FrameSize大小为" << m_FrameSize << std::endl;
|
||||
|
||||
buffer = new unsigned short[m_FrameSize];
|
||||
dark = new unsigned short[m_FrameSize];
|
||||
white = new unsigned short[m_FrameSize];
|
||||
|
||||
std::cout << "buffer<EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>ַ" << buffer << std::endl;
|
||||
std::cout << "dark<EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>ַ" << dark << std::endl;
|
||||
std::cout << "white<EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>ַ" << white << std::endl;
|
||||
std::cout << "buffer内存地址" << buffer << std::endl;
|
||||
std::cout << "dark内存地址" << dark << std::endl;
|
||||
std::cout << "white内存地址" << white << std::endl;
|
||||
}
|
||||
|
||||
void ImagerOperationBase::WriteHdr()
|
||||
@ -540,6 +540,6 @@ unsigned short ImagerOperationBase::GetMaxValue(unsigned short* dark, int number
|
||||
max = dark[i];
|
||||
}
|
||||
}
|
||||
//std::cout << "<EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪ" << max << std::endl;
|
||||
//std::cout << "本帧最大值为" << max << std::endl;
|
||||
return max;
|
||||
}
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
#include <QObject>
|
||||
#include <QString>
|
||||
|
||||
@ -49,7 +49,7 @@ public:
|
||||
int getFrameCounter() const;
|
||||
int getFocusFrameCounter() const;
|
||||
|
||||
unsigned short* buffer;//<EFBFBD>洢<EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>д<EFBFBD>뵽Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned short* buffer;//存储采集到的影像的中间变量,下一步写入到硬盘中
|
||||
void set_buffer();
|
||||
void setFileName2Save(string FileName);
|
||||
|
||||
@ -60,25 +60,25 @@ public:
|
||||
|
||||
|
||||
protected:
|
||||
CImage* m_RgbImage;//<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>rgbͼ<EFBFBD><EFBFBD>
|
||||
bool m_bRecordControlState;//<EFBFBD>ɼ<EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD>ֹͣ<EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int m_iFrameCounter;//<EFBFBD><EFBFBD>¼<EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD>
|
||||
int m_iFocusFrameCounter;//<EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD>
|
||||
int m_FrameSize;//<EFBFBD><EFBFBD>ʾһ֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD>ٸ<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>m_FrameSize = m_imager.get_band_count()*m_imager.get_sample_count();
|
||||
int m_iFrameNumber;//<EFBFBD><EFBFBD>Ҫ<EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD>
|
||||
CImage* m_RgbImage;//显示的rgb图像
|
||||
bool m_bRecordControlState;//采集状态;可用于执行停止采集操作
|
||||
int m_iFrameCounter;//记录采集的帧数
|
||||
int m_iFocusFrameCounter;//记录调焦时采集的帧数
|
||||
int m_FrameSize;//表示一帧代表有多少个数值:m_FrameSize = m_imager.get_band_count()*m_imager.get_sample_count();
|
||||
int m_iFrameNumber;//需要采集的总帧数
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
string m_FileName2Save;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
|
||||
//以下两个参数用于给保存的影像文件命名
|
||||
string m_FileName2Save;//保存的影像文件名
|
||||
string m_FileName2Save2;
|
||||
int m_FileSavedCounter;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
int m_FileSavedCounter;//保存了几个影像文件
|
||||
|
||||
bool m_HasDark;//<EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><EFBFBD>˰<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊtrue
|
||||
bool m_HasWhite;//<EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><EFBFBD>˰װ<EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊtrue
|
||||
bool m_HasDark;//当采集了暗电流之后,设置为true
|
||||
bool m_HasWhite;//当采集了白板之后,设置为true
|
||||
|
||||
unsigned short* dark;//<EFBFBD>洢<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned short* white;//<EFBFBD>洢<EFBFBD>װ<EFBFBD>
|
||||
unsigned short* dark;//存储暗电流
|
||||
unsigned short* white;//存储白板
|
||||
|
||||
bool m_bFocusControlState;//<EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool m_bFocusControlState;//控制调焦结束
|
||||
|
||||
|
||||
|
||||
@ -92,7 +92,7 @@ private:
|
||||
double calcFocusIndexSobelPrivate(void* pvData);
|
||||
|
||||
public slots:
|
||||
virtual void connect_imager(int frameNumber);//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD><EFBFBD><EFBFBD>
|
||||
virtual void connect_imager(int frameNumber);//连接相机、开辟缓存
|
||||
virtual double auto_exposure();
|
||||
virtual void focus();
|
||||
virtual void start_record();
|
||||
@ -102,10 +102,10 @@ public slots:
|
||||
|
||||
void getFocusIndexSobel();
|
||||
signals:
|
||||
void PlotSignal(int, int, QString);//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD><EFBFBD>źţ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD>-1<><31><EFBFBD><EFBFBD><EFBFBD>˴βɼ<CEB2><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD>
|
||||
void RecordFinishedSignal_WhenFrameNumberMeet();//<EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>źţ<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD>m_iFrameNumber<EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void RecordFinishedSignal_WhenFrameNumberNotMeet();//<EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>źţ<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD>m_iFrameNumber<EFBFBD><EFBFBD>û<EFBFBD>вɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD>;ֹͣ<EFBFBD>ɼ<EFBFBD>
|
||||
void SpectralSignal(int);//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƹ<EFBFBD><EFBFBD>ף<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD>
|
||||
void PlotSignal(int, int, QString);//绘制影像信号,第一个参数:第几个影像;第二个参数:采集到的帧数,-1代表此次采集的最后一次绘制
|
||||
void RecordFinishedSignal_WhenFrameNumberMeet();//采集完成信号:需要采集的总帧数(m_iFrameNumber)采集完成
|
||||
void RecordFinishedSignal_WhenFrameNumberNotMeet();//采集完成信号:需要采集的总帧数(m_iFrameNumber)没有采集完成,中途停止采集
|
||||
void SpectralSignal(int);//发射1代表正在调焦,绘制光谱,发射0表示调焦完成;
|
||||
|
||||
void RecordWhiteFinishSignal();
|
||||
void RecordDarlFinishSignal();
|
||||
@ -113,12 +113,12 @@ signals:
|
||||
void FocusIndexSobelSignal(double);
|
||||
|
||||
|
||||
void testImagerStatus();//<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void testImagerStatus();//表示可以测试相机连接状态:是否连接,并反映到界面上
|
||||
void autoExposureSignal();
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>.bil/.hdr<64><72>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ɺ<C9BA><F3B7A2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳɼ<D3B2><C9BC>̷߳<DFB3><CCB7><EFBFBD><EFBFBD><EFBFBD>Qt <20><><EFBFBD><EFBFBD> queued connection<EFBFBD><EFBFBD>
|
||||
// 新增:当一组影像文件(.bil/.hdr)写入完成后发出(会从采集线程发出,Qt 会做 queued connection)
|
||||
void ImageFileSaved(const QString& path, int fileIndex);
|
||||
|
||||
// <EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><EFBFBD><EFBFBD> MapLayer*<2A><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>UI <20>㸺<EFBFBD><EFBFBD> MapLayer <20><><EFBFBD><EFBFBD><F3B2A2B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 修改:不再直接发送 MapLayer*,而是发送文件名与文件路径,UI 层负责创建 MapLayer 对象并管理生命周期
|
||||
void LayerFileCreated(const QString& baseName, const QString& filePath, int fileIndex);
|
||||
};
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
#include "stdafx.h"
|
||||
#include "fileOperation.h"
|
||||
#include "AppSettings.h"
|
||||
|
||||
FileOperation::FileOperation()
|
||||
{
|
||||
@ -27,6 +28,11 @@ string FileOperation::getDirectoryOfExe()
|
||||
|
||||
string FileOperation::getDirectoryFromString(string directory)
|
||||
{
|
||||
if (directory.empty())
|
||||
{
|
||||
directory = AppSettings::instance().dataFolder().toStdString();
|
||||
}
|
||||
|
||||
QString tmp = QString::fromStdString(directory);
|
||||
QDir dir;
|
||||
if (!dir.exists(tmp))
|
||||
|
||||
@ -17,7 +17,7 @@ public:
|
||||
~FileOperation();
|
||||
|
||||
string getDirectoryOfExe();//getDirectoryOfExe
|
||||
string getDirectoryFromString(string directory="C:\\HPPA_image");
|
||||
string getDirectoryFromString(string directory="");
|
||||
|
||||
|
||||
|
||||
|
||||
267
HPPA/set.ui
Normal file
267
HPPA/set.ui
Normal file
@ -0,0 +1,267 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>setDialog</class>
|
||||
<widget class="QDialog" name="setDialog">
|
||||
<property name="windowModality">
|
||||
<enum>Qt::ApplicationModal</enum>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>486</width>
|
||||
<height>229</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QWidget" name="contentWidget" native="true">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QWidget #contentWidget
|
||||
{
|
||||
background: #040125;
|
||||
/*border-radius: 8px 8px 8px 8px;*/
|
||||
border: 1px solid #2f6bff;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
QLabel {
|
||||
color: rgb(255, 255, 255);
|
||||
}
|
||||
|
||||
QPushButton
|
||||
{
|
||||
/*width: 172px;
|
||||
height: 56px;*/
|
||||
font: 10pt "新宋体";
|
||||
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 8px;
|
||||
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;
|
||||
}
|
||||
</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_7">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="spacing">
|
||||
<number>10</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QWidget" name="titlebarWidget" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>43</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>43</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QWidget #titlebarWidget
|
||||
{
|
||||
background: #0E1C4C;
|
||||
border: 1px solid #2f6bff;
|
||||
}</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_6">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="iconLabel">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="pixmap">
|
||||
<pixmap resource="HPPA.qrc">:/png/resources/icons/png/Spectral_Insight_27.png</pixmap>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLabel" name="label_9">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QLabel
|
||||
{
|
||||
color:#E2EDFF;
|
||||
}</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>设置</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>505</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="3">
|
||||
<widget class="QPushButton" name="closeBtn">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QPushButton
|
||||
{
|
||||
/*width: 172px;
|
||||
height: 56px;*/
|
||||
font: 10pt "新宋体";
|
||||
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 8px;
|
||||
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;
|
||||
}</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="HPPA.qrc">
|
||||
<normaloff>:/svg/resources/icons/svg/close.svg</normaloff>:/svg/resources/icons/svg/close.svg</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QWidget" name="widget" native="true">
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>数据路径</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="dataFolderLineEdit"/>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QPushButton" name="dataFolderBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="HPPA.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
||||
49
HPPA/setWindow.cpp
Normal file
49
HPPA/setWindow.cpp
Normal file
@ -0,0 +1,49 @@
|
||||
#include "setWindow.h"
|
||||
#include "AppSettings.h"
|
||||
#include <QSvgRenderer>
|
||||
#include <QPainter>
|
||||
#include <QFileDialog>
|
||||
|
||||
setWindow::setWindow(QWidget* parent)
|
||||
{
|
||||
ui.setupUi(this);
|
||||
|
||||
setWindowFlags(Qt::FramelessWindowHint);
|
||||
|
||||
connect(this->ui.closeBtn, SIGNAL(released()), this, SLOT(onExit()));
|
||||
connect(this->ui.dataFolderBtn, SIGNAL(clicked()), this, SLOT(onSelectDataFolder()));
|
||||
|
||||
loadSettings();
|
||||
}
|
||||
|
||||
setWindow::~setWindow()
|
||||
{
|
||||
}
|
||||
|
||||
void setWindow::loadSettings()
|
||||
{
|
||||
ui.dataFolderLineEdit->setText(AppSettings::instance().dataFolder());
|
||||
}
|
||||
|
||||
void setWindow::saveSettings()
|
||||
{
|
||||
AppSettings::instance().setDataFolder(ui.dataFolderLineEdit->text());
|
||||
}
|
||||
|
||||
void setWindow::onSelectDataFolder()
|
||||
{
|
||||
QString dir = QFileDialog::getExistingDirectory(this,
|
||||
QString::fromLocal8Bit("选择数据保存路径"),
|
||||
ui.dataFolderLineEdit->text());
|
||||
|
||||
if (!dir.isEmpty())
|
||||
{
|
||||
ui.dataFolderLineEdit->setText(dir);
|
||||
}
|
||||
}
|
||||
|
||||
void setWindow::onExit()
|
||||
{
|
||||
saveSettings();
|
||||
this->close();
|
||||
}
|
||||
27
HPPA/setWindow.h
Normal file
27
HPPA/setWindow.h
Normal file
@ -0,0 +1,27 @@
|
||||
#pragma once
|
||||
#include <QtWidgets/qdialog.h>
|
||||
#include <qstring.h>
|
||||
|
||||
#include "ui_set.h"
|
||||
|
||||
class setWindow :public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
setWindow(QWidget* parent = Q_NULLPTR);
|
||||
~setWindow();
|
||||
|
||||
private:
|
||||
Ui::setDialog ui;
|
||||
|
||||
void loadSettings();
|
||||
void saveSettings();
|
||||
|
||||
public Q_SLOTS:
|
||||
void onExit();
|
||||
void onSelectDataFolder();
|
||||
|
||||
signals:
|
||||
|
||||
};
|
||||
Reference in New Issue
Block a user