diff --git a/HPPA/CustomDockWidgetBase.cpp b/HPPA/CustomDockWidgetBase.cpp new file mode 100644 index 0000000..05c3c13 --- /dev/null +++ b/HPPA/CustomDockWidgetBase.cpp @@ -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; /* 取消底部边框 */ + + 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 docks = m_mainWindow->findChildren(); + 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 docks; + QList 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)); + } +} diff --git a/HPPA/CustomDockWidgetBase.h b/HPPA/CustomDockWidgetBase.h new file mode 100644 index 0000000..d304e97 --- /dev/null +++ b/HPPA/CustomDockWidgetBase.h @@ -0,0 +1,35 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include + +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 m_hiddenDocks; + QByteArray m_savedState; + QMap m_originalSizes; + + QLabel* title_label; + void initialize(); +}; diff --git a/HPPA/HPPA.cpp b/HPPA/HPPA.cpp index db70028..1b1d7f7 100644 --- a/HPPA/HPPA.cpp +++ b/HPPA/HPPA.cpp @@ -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; /* 取消底部边框 */ - - border-top-left-radius: 10px; - border-top-right-radius: 10px; - } - )"; + ui.mDockWidgetRGBCamera->setTile(QString::fromLocal8Bit("轮播")); + ui.mDockWidgetSimulator->setTile(QString::fromLocal8Bit("3D模型")); + ui.mDockWidgetSpectrometer->setTile(QString::fromLocal8Bit("光谱仪")); //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); //高光谱查看 - 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); - - - //光谱显示 - - //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); //升降桌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(); -} \ No newline at end of file +} diff --git a/HPPA/HPPA.h b/HPPA/HPPA.h index 6e4b8c9..a91594f 100644 --- a/HPPA/HPPA.h +++ b/HPPA/HPPA.h @@ -43,6 +43,8 @@ #include "ResononNirImager.h" #include "Corning410Imager.h" +#include "CustomDockWidgetBase.h" + #define PI 3.1415926 QT_CHARTS_USE_NAMESPACE//QChartView 使用 需要加宏, 否则无法使用 diff --git a/HPPA/HPPA.ui b/HPPA/HPPA.ui index 9e8b4ed..88dc023 100644 --- a/HPPA/HPPA.ui +++ b/HPPA/HPPA.ui @@ -233,7 +233,7 @@ QToolBar QToolButton:hover { - + @@ -244,7 +244,7 @@ QToolBar QToolButton:hover { 1 - + 0 @@ -257,83 +257,77 @@ QToolBar QToolButton:hover { 0 - - 0 - - - - - false + + + + QFrame::NoFrame - - 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; /* 鏍囬鏂囧瓧棰滆壊 */ -} - + + QFrame::Plain - - + + true - - - 0 + + + + 0 + 0 + 256 + 242 + - - 0 - - - 0 - - - 0 - - - - - 鍏抽棴 - - - - - - - 鎵撳紑 - - - - - - - QFrame::NoFrame - - - QFrame::Plain - - - 鎽勫儚澶村叧闂紒 - - - Qt::AlignCenter - - - - + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QFrame::NoFrame + + + QFrame::Plain + + + 鎽勫儚澶村叧闂紒 + + + Qt::AlignCenter + + + + + + + + + + + 鎵撳紑 + + + + + + + 鍏抽棴 + - + @@ -382,37 +376,7 @@ QGroupBox:title { - - - - - - 鍏夎氨鏇茬嚎 - - - 2 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - + @@ -918,7 +882,13 @@ QGroupBox:title { ImagerPositionSimulation QGraphicsView -
imagerpositionsimulation.h
+
imagerpositionsimulation.h
+
+ + CustomDockWidgetBase + QDockWidget +
customdockwidgetbase.h
+ 1
diff --git a/HPPA/HPPA.vcxproj b/HPPA/HPPA.vcxproj index 279d264..8c37913 100644 --- a/HPPA/HPPA.vcxproj +++ b/HPPA/HPPA.vcxproj @@ -108,6 +108,7 @@ + @@ -166,6 +167,7 @@ + diff --git a/HPPA/HPPA.vcxproj.filters b/HPPA/HPPA.vcxproj.filters index ee57894..f6e5a3b 100644 --- a/HPPA/HPPA.vcxproj.filters +++ b/HPPA/HPPA.vcxproj.filters @@ -133,6 +133,9 @@ Source Files + + Source Files + @@ -192,6 +195,9 @@ Header Files + + Header Files +