初步实现放大功能

This commit is contained in:
tangchao0503
2025-11-11 15:30:57 +08:00
parent e7a73430d0
commit 83ef26a1e2
7 changed files with 263 additions and 145 deletions

View File

@ -0,0 +1,135 @@
#include "CustomDockWidgetBase.h"
CustomDockWidgetBase::CustomDockWidgetBase(QMainWindow* parent)
: QDockWidget(parent),
m_mainWindow(parent),
m_isMaximized(false)
{
initialize();
}
CustomDockWidgetBase::CustomDockWidgetBase(QString title, QMainWindow* parent)
: QDockWidget(title, parent),
m_mainWindow(parent),
m_isMaximized(false)
{
initialize();
setTile(title);
}
void CustomDockWidgetBase::initialize()
{
QWidget* titleBar_Background = new QWidget(this);
titleBar_Background->setObjectName("titleBar_Background");
QGridLayout* layout_titleBar_Background = new QGridLayout(titleBar_Background);
layout_titleBar_Background->setContentsMargins(0, 0, 0, 0);
titleBar_Background->setStyleSheet(R"(
QWidget #titleBar_Background{
background: #040125;
}
)");
QWidget* titleBar = new QWidget(titleBar_Background);
titleBar->setObjectName("titleBar");
QHBoxLayout* layout = new QHBoxLayout(titleBar);
titleBar->setFixedHeight(30);
title_label = new QLabel(titleBar);
layout->setContentsMargins(10, 0, 10, 0);
layout->addWidget(title_label);
layout->addStretch();
m_maxButton = new QToolButton(titleBar);
m_maxButton->setIcon(style()->standardIcon(QStyle::SP_TitleBarMaxButton));
layout->addWidget(m_maxButton);
titleBar->setStyleSheet(R"(
QWidget #titleBar{
background: #0E1C4C;
/*border: 4px solid #2c586b;*/
/*padding-top: 10px;
padding-bottom: 10px;*/
border-top: 1px solid #2c586b;
border-left: 1px solid #2c586b;
border-right: 1px solid #2c586b;
border-bottom: none; /* ȡ<><C8A1><EFBFBD>ײ<EFBFBD><D7B2>߿<EFBFBD> */
border-top-left-radius: 5px;
border-top-right-radius: 5px;
}
)");
title_label->setStyleSheet("color: white;");
m_maxButton->setStyleSheet("");
layout_titleBar_Background->addWidget(titleBar);
setTitleBarWidget(titleBar_Background);
setFeatures(QDockWidget::DockWidgetClosable);
connect(m_maxButton, &QToolButton::clicked, this, &CustomDockWidgetBase::toggleMaximize);
}
void CustomDockWidgetBase::setTile(QString title)
{
title_label->setText(title);
}
void CustomDockWidgetBase::hideMaxButton()
{
m_maxButton->hide();
}
void CustomDockWidgetBase::toggleMaximize()
{
if (!m_isMaximized)
{
m_hiddenDocks.clear();
m_originalSizes.clear();
m_savedState = m_mainWindow->saveState();
const QList<QDockWidget*> docks = m_mainWindow->findChildren<QDockWidget*>();
for (QDockWidget* dock : docks)
{
m_originalSizes[dock] = dock->size();
if (dock != this && dock->isVisible())
{
dock->hide();
m_hiddenDocks.append(dock);
}
}
m_isMaximized = true;
m_maxButton->setIcon(style()->standardIcon(QStyle::SP_TitleBarNormalButton));
}
else
{
for (QDockWidget* dock : m_hiddenDocks)
{
dock->show();
}
if (!m_savedState.isEmpty())
{
m_mainWindow->restoreState(m_savedState);
m_savedState.clear();
}
QList<QDockWidget*> docks;
QList<int> widths, heights;
for (auto it = m_originalSizes.begin(); it != m_originalSizes.end(); ++it)
{
docks.append(it.key());
widths.append(it.value().width());
heights.append(it.value().height());
}
//m_mainWindow->resizeDocks(docks, widths, Qt::Horizontal);
//m_mainWindow->resizeDocks(docks, heights, Qt::Vertical);
m_isMaximized = false;
m_maxButton->setIcon(style()->standardIcon(QStyle::SP_TitleBarMaxButton));
}
}

View File

@ -0,0 +1,35 @@
#pragma once
#include <QDockWidget>
#include <QToolButton>
#include <QStyle>
#include <QHBoxLayout>
#include <QMainWindow>
#include <QMap>
#include <QSize>
#include <QLabel>
class CustomDockWidgetBase :
public QDockWidget
{
Q_OBJECT
public:
explicit CustomDockWidgetBase(QString title, QMainWindow* parent = nullptr);
explicit CustomDockWidgetBase(QMainWindow* parent = nullptr);
void setTile(QString title);
void hideMaxButton();
private slots:
void toggleMaximize();
private:
QMainWindow* m_mainWindow = nullptr;
QToolButton* m_maxButton = nullptr;
bool m_isMaximized = false;
QList<QDockWidget*> m_hiddenDocks;
QByteArray m_savedState;
QMap<QDockWidget*, QSize> m_originalSizes;
QLabel* title_label;
void initialize();
};

View File

@ -230,7 +230,6 @@ HPPA::HPPA(QWidget* parent)
delete ui.centralWidget;
ui.mDockWidgetRGBCamera->close();
ui.mDockWidgetSimulator->close();
ui.mDockWidgetSpectralViewer->close();
ui.mDockWidgetSpectrometer->close();
QString qss_DockWidget_contentWidget = R"(
@ -245,31 +244,20 @@ HPPA::HPPA(QWidget* parent)
border-bottom-left-radius: 10px;
border-bottom-right-radius: 10px;
)";
QString qss_DockWidget = R"(
QDockWidget::title{
background: #0E1C4C;
/*border: 4px solid #2c586b;*/
/*padding-top: 10px;
padding-bottom: 10px;*/
border-top: 1px solid #2c586b;
border-left: 1px solid #2c586b;
border-right: 1px solid #2c586b;
border-bottom: none; /* ȡ<><C8A1><EFBFBD>ײ<EFBFBD><D7B2>߿<EFBFBD> */
border-top-left-radius: 10px;
border-top-right-radius: 10px;
}
)";
ui.mDockWidgetRGBCamera->setTile(QString::fromLocal8Bit("<EFBFBD>ֲ<EFBFBD>"));
ui.mDockWidgetSimulator->setTile(QString::fromLocal8Bit("3Dģ<EFBFBD><EFBFBD>"));
ui.mDockWidgetSpectrometer->setTile(QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
//TOC
QDockWidget* dock_layers = new QDockWidget(QString::fromLocal8Bit("layers"), this);
CustomDockWidgetBase* dock_layers = new CustomDockWidgetBase(QString::fromLocal8Bit("layers"), this);
dock_layers->setObjectName("mDockLayers");
dock_layers->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
mPanelMenu->addAction(dock_layers->toggleViewAction());
addDockWidget(Qt::LeftDockWidgetArea, dock_layers);
dock_layers->hideMaxButton();
QWidget * dock_layersWidgetContents = new QWidget();
QWidget* dock_layersWidgetContents = new QWidget();
dock_layersWidgetContents->setObjectName(QString::fromUtf8("dockWidgetContents_2"));
QGridLayout* gridLayout_toc = new QGridLayout(dock_layersWidgetContents);
gridLayout_toc->setSpacing(6);
@ -291,7 +279,6 @@ HPPA::HPPA(QWidget* parent)
gridLayout_toc->addWidget(graphicsView_delete, 0, 0, 1, 1);
dock_layers->setWidget(dock_layersWidgetContents);
dock_layersWidgetContents->setStyleSheet(qss_DockWidget_contentWidget);
dock_layers->setStyleSheet(qss_DockWidget);
//dock_layers->setMinimumWidth(449);
//dock_layers->setMaximumWidth(450);
@ -304,7 +291,7 @@ HPPA::HPPA(QWidget* parent)
//ui.mDockWidgetRGBCamera->setMaximumHeight(498);
//<2F>߹<EFBFBD><DFB9>ײ鿴
QDockWidget* dock_hyperimgViewer = new QDockWidget(QString::fromLocal8Bit("hyimgViewer"), this);
QDockWidget* dock_hyperimgViewer = new CustomDockWidgetBase(QString::fromLocal8Bit("hyimgViewer"), this);
dock_hyperimgViewer->setObjectName("hyimgViewer");
QWidget* dock_hyperimgViewerWidgetContents = new QWidget();
@ -386,13 +373,8 @@ HPPA::HPPA(QWidget* parent)
setAxis(axisX, axisY);
m_chart->addAxis(axisX, Qt::AlignBottom);
m_chart->addAxis(axisY, Qt::AlignLeft);
m_chartView->setChart(m_chart);
gridLayout_hyperimgViewer->addWidget(imageViewerTabWidgetContainer, 0, 0, 1, 1);
gridLayout_hyperimgViewer->addWidget(line, 1, 0, 1, 1);
gridLayout_hyperimgViewer->addWidget(m_chartView, 2, 0, 1, 1);
@ -421,18 +403,8 @@ HPPA::HPPA(QWidget* parent)
dock_hyperimgViewer->setWidget(dock_hyperimgViewerWidgetContents);
mPanelMenu->addAction(dock_hyperimgViewer->toggleViewAction());
dock_hyperimgViewer->setStyleSheet(qss_DockWidget);
QWidget* tmp6 = new QWidget();
dock_hyperimgViewer->setTitleBarWidget(tmp6);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
//ui.mDockWidgetSpectralViewer->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
//ui.mDockWidgetSpectralViewer->setWidget(m_chartView);
////QLineSeries *series = new QLineSeries();
////QChart *chart = new QChart();
//mPanelMenu->addAction(ui.mDockWidgetSpectralViewer->toggleViewAction());
//dock_hyperimgViewer->setTitleBarWidget(tmp6);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dock
adjustTable* adt = new adjustTable();
@ -487,9 +459,6 @@ HPPA::HPPA(QWidget* parent)
splitDockWidget(dock_layers, ui.mDockWidgetSimulator, Qt::Vertical);
ui.mDockWidgetSimulator->show();
splitDockWidget(dock_hyperimgViewer, ui.mDockWidgetSpectralViewer, Qt::Vertical);
ui.mDockWidgetSpectralViewer->show();
splitDockWidget(ui.mDockWidgetRGBCamera, ui.mDockWidgetSpectrometer, Qt::Vertical);
ui.mDockWidgetSpectrometer->show();
tabifyDockWidget(ui.mDockWidgetSpectrometer, dock_omc);
@ -548,6 +517,8 @@ HPPA::HPPA(QWidget* parent)
createMoveplatformActionGroup();
connect(moveplatformActionGroup, &QActionGroup::triggered, this, &HPPA::selectingMoveplatform);
ui.mDockWidgetSimulator->setFeatures(QDockWidget::DockWidgetClosable);
QString strPath = QCoreApplication::applicationDirPath() + "/UILayout.ini";
QFile file(strPath);
if (file.open(QIODevice::ReadOnly))
@ -714,15 +685,12 @@ void HPPA::createOneMotorScenario()
dock->hide();
}
ui.mDockWidgetSpectralViewer->show();
ui.mDockWidgetSpectrometer->show();
dock_omc->show();
//tabifyDockWidget(ui.mDockWidgetSpectrometer, dock_omc);
//addDockWidget(Qt::RightDockWidgetArea, ui.mDockWidgetSpectralViewer);
//addDockWidget(Qt::RightDockWidgetArea, ui.mDockWidgetSpectrometer);
//splitDockWidget(ui.mDockWidgetSpectralViewer, ui.mDockWidgetSpectrometer, Qt::Vertical);
//QDockWidget* dockTop = new QDockWidget(QString::fromLocal8Bit("1"), this);
//QDockWidget* dockBottom = new QDockWidget(QString::fromLocal8Bit("2"), this);
@ -1645,4 +1613,4 @@ void WorkerThread3::run()
m_ctrlFocusMotor->StartAutoFocus(820, 910, 20, 2);
emit AutoFocusFinishedSignal();
}
}

View File

@ -43,6 +43,8 @@
#include "ResononNirImager.h"
#include "Corning410Imager.h"
#include "CustomDockWidgetBase.h"
#define PI 3.1415926
QT_CHARTS_USE_NAMESPACE//QChartView ʹ<><CAB9> <20><>Ҫ<EFBFBD>Ӻ꣬ <20><><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD>ʹ<EFBFBD><CAB9>

View File

@ -233,7 +233,7 @@ QToolBar QToolButton:hover {
</string>
</property>
</widget>
<widget class="QDockWidget" name="mDockWidgetRGBCamera">
<widget class="CustomDockWidgetBase" name="mDockWidgetRGBCamera">
<property name="styleSheet">
<string notr="true"/>
</property>
@ -244,7 +244,7 @@ QToolBar QToolButton:hover {
<number>1</number>
</attribute>
<widget class="QWidget" name="dockWidgetContents">
<layout class="QGridLayout" name="gridLayout_2">
<layout class="QGridLayout" name="gridLayout_3">
<property name="leftMargin">
<number>0</number>
</property>
@ -257,83 +257,77 @@ QToolBar QToolButton:hover {
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QGroupBox" name="groupBox_4">
<property name="mouseTracking">
<bool>false</bool>
<item row="0" column="0" colspan="2">
<widget class="QScrollArea" name="scrollArea">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="styleSheet">
<string notr="true">QGroupBox {
/* border: 2px solid #3498db; 边框颜色 */
border-radius: 5px; /* 圆角 */
padding: 10px; /* 内边距 */
background-color: rgb(255, 255, 255);
}
QGroupBox:title {
subcontrol-position: top left; /* 标题位置 */
padding: 0 10px; /* 标题内边距 */
font-weight: bold; /* 标题字体加粗 */
color: #3498db; /* 标题文字颜色 */
}
</string>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="title">
<string/>
<property name="widgetResizable">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<property name="leftMargin">
<number>0</number>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>256</width>
<height>242</height>
</rect>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="1" column="1">
<widget class="QPushButton" name="close_rgb_camera_btn">
<property name="text">
<string>关闭</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="open_rgb_camera_btn">
<property name="text">
<string>打开</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="cam_label">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="text">
<string>摄像头关闭!</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
<layout class="QGridLayout" name="gridLayout_2">
<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>
<item row="0" column="0">
<widget class="QLabel" name="cam_label">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="text">
<string>摄像头关闭!</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="open_rgb_camera_btn">
<property name="text">
<string>打开</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="close_rgb_camera_btn">
<property name="text">
<string>关闭</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<widget class="QDockWidget" name="mDockWidgetSimulator">
<widget class="CustomDockWidgetBase" name="mDockWidgetSimulator">
<property name="styleSheet">
<string notr="true"/>
</property>
@ -382,37 +376,7 @@ QGroupBox:title {
</layout>
</widget>
</widget>
<widget class="QDockWidget" name="mDockWidgetSpectralViewer">
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="windowTitle">
<string>光谱曲线</string>
</property>
<attribute name="dockWidgetArea">
<number>2</number>
</attribute>
<widget class="QWidget" name="dockWidgetContents_3">
<layout class="QGridLayout" name="gridLayout_10">
<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>
</layout>
</widget>
</widget>
<widget class="QDockWidget" name="mDockWidgetSpectrometer">
<widget class="CustomDockWidgetBase" name="mDockWidgetSpectrometer">
<property name="styleSheet">
<string notr="true"/>
</property>
@ -918,7 +882,13 @@ QGroupBox:title {
<customwidget>
<class>ImagerPositionSimulation</class>
<extends>QGraphicsView</extends>
<header location="global">imagerpositionsimulation.h</header>
<header>imagerpositionsimulation.h</header>
</customwidget>
<customwidget>
<class>CustomDockWidgetBase</class>
<extends>QDockWidget</extends>
<header location="global">customdockwidgetbase.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources>

View File

@ -108,6 +108,7 @@
<ClCompile Include="adjustTable.cpp" />
<ClCompile Include="CaptureCoordinator.cpp" />
<ClCompile Include="Corning410Imager.cpp" />
<ClCompile Include="CustomDockWidgetBase.cpp" />
<ClCompile Include="hppaConfigFile.cpp" />
<ClCompile Include="ImagerOperationBase.cpp" />
<ClCompile Include="imager_base.cpp" />
@ -166,6 +167,7 @@
<QtMoc Include="RobotArmControl.h" />
<QtMoc Include="Corning410Imager.h" />
<QtMoc Include="CaptureCoordinator.h" />
<QtMoc Include="CustomDockWidgetBase.h" />
<ClInclude Include="imager_base.h" />
<ClInclude Include="irisximeaimager.h" />
<QtMoc Include="OneMotorControl.h" />

View File

@ -133,6 +133,9 @@
<ClCompile Include="TwoMotorControl.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="CustomDockWidgetBase.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<QtMoc Include="fileOperation.h">
@ -192,6 +195,9 @@
<QtMoc Include="CaptureCoordinator.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="CustomDockWidgetBase.h">
<Filter>Header Files</Filter>
</QtMoc>
</ItemGroup>
<ItemGroup>
<ClInclude Include="imageProcessor.h">