通过自定义控件实现功能:状态栏显示采集帧数;

This commit is contained in:
tangchao0503
2026-03-20 22:15:50 +08:00
parent d358989579
commit 2cf86df608
6 changed files with 120 additions and 1 deletions

View File

@ -82,6 +82,8 @@ HPPA::HPPA(QWidget* parent)
//ui.statusBar->addPermanentWidget(xmotor_state_label1);
//ui.statusBar->addPermanentWidget(ymotor_state_label1);
m_recordFrameCounter = new recordFrameCounter(this);
ui.statusBar->addWidget(m_recordFrameCounter);
connect(this->ui.action_exit, SIGNAL(triggered()), this, SLOT(onExit()));
connect(this->ui.mActionOpenImg, SIGNAL(triggered()), this, SLOT(onOpenImg()));
@ -1043,6 +1045,10 @@ void HPPA::removeLayerByTreeIndex()
const int tabIndex = m_imageViewerTabWidget->indexOf(layerWidget);
if (tabIndex >= 0)
{
if (m_recordFrameCounter)
{
m_recordFrameCounter->removeCounter(layerWidget);
}
m_imageViewerTabWidget->removeTab(tabIndex);
}
layerWidget->deleteLater();
@ -1095,6 +1101,10 @@ void HPPA::removeAllLayersInRasterGroup()
const int tabIndex = m_imageViewerTabWidget->indexOf(layerWidget);
if (tabIndex >= 0)
{
if (m_recordFrameCounter)
{
m_recordFrameCounter->removeCounter(layerWidget);
}
m_imageViewerTabWidget->removeTab(tabIndex);
}
layerWidget->deleteLater();
@ -1451,6 +1461,11 @@ QWidget* HPPA::onCreateTab(QString tabName)
m_imageViewerTabWidget->setCurrentIndex(m_imageViewerTabWidget->count() - 1);
if (m_recordFrameCounter)
{
m_recordFrameCounter->addCounter(tabTmp);
}
return tabTmp;
}
@ -1464,6 +1479,12 @@ void HPPA::onTabWidgetCurrentChanged(int index)//代码新建一个tab会调
//记录当前
m_TabWidgetCurrentIndex = index;
if (m_recordFrameCounter)
{
QWidget* currentWidget = m_imageViewerTabWidget->widget(index);
m_recordFrameCounter->switchTo(currentWidget);
}
//获取绘图控件
QWidget* currentWidget = m_imageViewerTabWidget->widget(index);
QList<Mapcavas*> currentImageViewer = currentWidget->findChildren<Mapcavas*>();
@ -2065,6 +2086,11 @@ void HPPA::onPlotHyperspectralImageRgbImage(int fileNumber, int frameNumber, QSt
QList<Mapcavas*> currentImageViewer = currentWidget->findChildren<Mapcavas*>();
currentImageViewer[0]->DisplayFrameNumber(m_Imager->getFrameCounter());//界面中显示已经采集的帧数
if (m_recordFrameCounter)
{
m_recordFrameCounter->updateFrameCount(currentWidget, m_Imager->getFrameCounter());
}
//创建需要显示的图像--opencv版本
ImageProcessor imageProcessor;
//cv::Mat rgbImage(*m_Imager->getRgbImage()->m_matRgbImage, cv::Range(0, m_Imager->getFrameCounter()), cv::Range::all());//2022.3.18重构的

View File

@ -71,6 +71,8 @@
#include "HyperImagerControl.h"
#include "recordFrameCounter.h"
#define PI 3.1415926
QT_CHARTS_USE_NAMESPACE//QChartView 使用 需要加宏, 否则无法使用
@ -292,6 +294,8 @@ private:
QWidget* m_focusTab=nullptr;
recordFrameCounter* m_recordFrameCounter = nullptr;
public Q_SLOTS:
void onPlotHyperspectralImageRgbImage(int fileNumber, int frameNumber, QString filePath);
void PlotSpectral(int state);

View File

@ -138,6 +138,7 @@
<ClCompile Include="RasterDataProvider.cpp" />
<ClCompile Include="RasterLayer.cpp" />
<ClCompile Include="RasterRenderer.cpp" />
<ClCompile Include="recordFrameCounter.cpp" />
<ClCompile Include="resononImager.cpp" />
<ClCompile Include="ResononNirImager.cpp" />
<ClCompile Include="RgbCameraOperation.cpp" />
@ -220,6 +221,7 @@
<QtMoc Include="MapTools.h" />
<ClInclude Include="RasterDataProvider.h" />
<ClInclude Include="RasterRenderer.h" />
<QtMoc Include="recordFrameCounter.h" />
<ClInclude Include="utility_tc.h" />
<QtMoc Include="aboutWindow.h" />
<ClInclude Include="hppaConfigFile.h" />

View File

@ -196,6 +196,9 @@
<ClCompile Include="HyperImagerControl.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="recordFrameCounter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<QtMoc Include="fileOperation.h">
@ -318,6 +321,9 @@
<QtMoc Include="HyperImagerControl.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="recordFrameCounter.h">
<Filter>Header Files</Filter>
</QtMoc>
</ItemGroup>
<ItemGroup>
<ClInclude Include="imageProcessor.h">

View File

@ -0,0 +1,57 @@
#include "stdafx.h"
#include "recordFrameCounter.h"
recordFrameCounter::recordFrameCounter(QWidget* parent)
: QWidget(parent)
{
m_stackedWidget = new QStackedWidget();
m_stackedWidget->setContentsMargins(0, 0, 0, 0);
QHBoxLayout* layout = new QHBoxLayout(this);
layout->setContentsMargins(0, 0, 0, 0);
QLabel* titleLabel = new QLabel(QString::fromLocal8Bit("帧数: "));
titleLabel->setStyleSheet("color: white;");
layout->addWidget(titleLabel);
layout->addWidget(m_stackedWidget);
}
void recordFrameCounter::addCounter(QWidget* tabWidget)
{
QLabel* label = new QLabel("0");
label->setStyleSheet("color: white;");
label->setAlignment(Qt::AlignVCenter | Qt::AlignLeft);
m_labelMap.insert(tabWidget, label);
m_stackedWidget->addWidget(label);
m_stackedWidget->setCurrentWidget(label);
}
void recordFrameCounter::removeCounter(QWidget* tabWidget)
{
auto it = m_labelMap.find(tabWidget);
if (it != m_labelMap.end())
{
QLabel* label = it.value();
m_stackedWidget->removeWidget(label);
delete label;
m_labelMap.erase(it);
}
}
void recordFrameCounter::switchTo(QWidget* tabWidget)
{
auto it = m_labelMap.find(tabWidget);
if (it != m_labelMap.end())
{
m_stackedWidget->setCurrentWidget(it.value());
}
}
void recordFrameCounter::updateFrameCount(QWidget* tabWidget, int frameCount)
{
auto it = m_labelMap.find(tabWidget);
if (it != m_labelMap.end())
{
it.value()->setText(QString::number(frameCount));
}
}

24
HPPA/recordFrameCounter.h Normal file
View File

@ -0,0 +1,24 @@
#pragma once
#include <QWidget>
#include <QStackedWidget>
#include <QLabel>
#include <QHBoxLayout>
#include <QMap>
class recordFrameCounter : public QWidget
{
Q_OBJECT
public:
explicit recordFrameCounter(QWidget* parent = nullptr);
void addCounter(QWidget* tabWidget);
void removeCounter(QWidget* tabWidget);
void switchTo(QWidget* tabWidget);
void updateFrameCount(QWidget* tabWidget, int frameCount);
private:
QStackedWidget* m_stackedWidget = nullptr;
QMap<QWidget*, QLabel*> m_labelMap;
};