From 797ff77f5f46fcf0f10d8ad20baaf262694d2f4b Mon Sep 17 00:00:00 2001 From: tangchao0503 <735056338@qq.com> Date: Thu, 13 Nov 2025 14:51:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=95=8C=E9=9D=A2=EF=BC=9A?= =?UTF-8?q?=201=E3=80=81=E5=8F=B3=E4=B8=8B=E8=A7=92=E7=9C=8B=E6=9D=BF?= =?UTF-8?q?=E9=80=9A=E8=BF=87tabwidget=E7=AE=A1=E7=90=86=E5=BE=88=E5=A4=9A?= =?UTF-8?q?=E5=8F=AF=E6=89=A9=E5=B1=95=E6=8E=A7=E5=88=B6=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=EF=BC=9B=202=E3=80=81=E5=AE=9A=E5=88=B6=E5=8F=B3=E4=B8=8B?= =?UTF-8?q?=E8=A7=92=E6=94=BE=E5=A4=A7=E5=8A=9F=E8=83=BD=EF=BC=9A=E5=8D=A0?= =?UTF-8?q?=E7=94=A8=E5=8F=B3=E4=B8=8A=E8=A7=92=E7=9A=84=E7=9C=8B=E6=9D=BF?= =?UTF-8?q?=E7=A9=BA=E9=97=B4=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HPPA/CustomDockWidgetBase.cpp | 69 +++++ HPPA/CustomDockWidgetBase.h | 24 +- HPPA/HPPA.cpp | 102 +++---- HPPA/HPPA.h | 4 +- HPPA/HPPA.ui | 498 ++++++++++++++++++---------------- HPPA/HPPA.vcxproj.filters | 6 + 6 files changed, 408 insertions(+), 295 deletions(-) diff --git a/HPPA/CustomDockWidgetBase.cpp b/HPPA/CustomDockWidgetBase.cpp index 05c3c13..9ea6dc1 100644 --- a/HPPA/CustomDockWidgetBase.cpp +++ b/HPPA/CustomDockWidgetBase.cpp @@ -102,6 +102,7 @@ void CustomDockWidgetBase::toggleMaximize() } m_isMaximized = true; + emit maximizeStateChanged(m_isMaximized); m_maxButton->setIcon(style()->standardIcon(QStyle::SP_TitleBarNormalButton)); } else @@ -126,10 +127,78 @@ void CustomDockWidgetBase::toggleMaximize() heights.append(it.value().height()); } + m_mainWindow->resizeDocks(docks, widths, Qt::Horizontal); + m_mainWindow->resizeDocks(docks, heights, Qt::Vertical); + + m_isMaximized = false; + emit maximizeStateChanged(m_isMaximized); + m_maxButton->setIcon(style()->standardIcon(QStyle::SP_TitleBarMaxButton)); + } +} + + +CustomDockWidgetHideAbove::CustomDockWidgetHideAbove(QString title, QMainWindow* parent) + :CustomDockWidgetBase(title, parent) +{ + +} +CustomDockWidgetHideAbove::CustomDockWidgetHideAbove(QMainWindow* parent) + :CustomDockWidgetBase(parent) +{ + +} + +void CustomDockWidgetHideAbove::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->objectName().contains("mDockWidgetRGBCamera") && dock->isVisible()) + { + dock->hide(); + m_hiddenDocks.append(dock); + } + } + + m_isMaximized = true; + emit maximizeStateChanged(m_isMaximized); + 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; + emit maximizeStateChanged(m_isMaximized); m_maxButton->setIcon(style()->standardIcon(QStyle::SP_TitleBarMaxButton)); } } diff --git a/HPPA/CustomDockWidgetBase.h b/HPPA/CustomDockWidgetBase.h index d304e97..77f3eea 100644 --- a/HPPA/CustomDockWidgetBase.h +++ b/HPPA/CustomDockWidgetBase.h @@ -18,10 +18,13 @@ public: void setTile(QString title); void hideMaxButton(); -private slots: - void toggleMaximize(); +public slots: + virtual void toggleMaximize(); -private: +signals: + void maximizeStateChanged(bool isMaximized); + +protected: QMainWindow* m_mainWindow = nullptr; QToolButton* m_maxButton = nullptr; bool m_isMaximized = false; @@ -33,3 +36,18 @@ private: QLabel* title_label; void initialize(); }; + +class CustomDockWidgetHideAbove : + public CustomDockWidgetBase +{ + Q_OBJECT +public: + explicit CustomDockWidgetHideAbove(QString title, QMainWindow* parent = nullptr); + explicit CustomDockWidgetHideAbove(QMainWindow* parent = nullptr); + +private slots: + void toggleMaximize(); + +private: + +}; diff --git a/HPPA/HPPA.cpp b/HPPA/HPPA.cpp index 1b1d7f7..cc25b93 100644 --- a/HPPA/HPPA.cpp +++ b/HPPA/HPPA.cpp @@ -247,7 +247,7 @@ HPPA::HPPA(QWidget* parent) ui.mDockWidgetRGBCamera->setTile(QString::fromLocal8Bit("轮播")); ui.mDockWidgetSimulator->setTile(QString::fromLocal8Bit("3D模型")); - ui.mDockWidgetSpectrometer->setTile(QString::fromLocal8Bit("光谱仪")); + ui.mDockWidgetSpectrometer->setTile(QString::fromLocal8Bit("控制")); //TOC CustomDockWidgetBase* dock_layers = new CustomDockWidgetBase(QString::fromLocal8Bit("layers"), this); @@ -303,7 +303,13 @@ HPPA::HPPA(QWidget* parent) gridLayout_hyperimgViewer->setContentsMargins(1, 2, 1, 2); m_imageViewerTabWidget = new QTabWidget(); + //m_imageViewerTabWidget->tabBar()->setFixedHeight(40);//没有效果,在qss中设置高度才有效果,为啥???? m_imageViewerTabWidget->clear();//必须放在最前面,首先删除所有的tab + QToolButton* maxButton = new QToolButton(); + maxButton->setIcon(style()->standardIcon(QStyle::SP_TitleBarMaxButton)); + connect(maxButton, SIGNAL(clicked()), dock_hyperimgViewer, SLOT(toggleMaximize())); + m_imageViewerTabWidget->setCornerWidget(maxButton, Qt::TopRightCorner); + //onCreateTab(0); //m_imageViewerTabWidget->setTabsClosable(true);//这样每页都会有关闭按钮 connect(m_imageViewerTabWidget, SIGNAL(currentChanged(int)), this, SLOT(onTabWidgetCurrentChanged(int))); m_imageViewerTabWidget->setStyleSheet(R"( @@ -313,6 +319,7 @@ HPPA::HPPA(QWidget* parent) padding: 6px 12px; border: none; border-bottom: 1px solid #27376C; + height: 18; } QTabBar::tab:selected { @@ -404,53 +411,11 @@ HPPA::HPPA(QWidget* parent) dock_hyperimgViewer->setWidget(dock_hyperimgViewerWidgetContents); mPanelMenu->addAction(dock_hyperimgViewer->toggleViewAction()); QWidget* tmp6 = new QWidget(); - //dock_hyperimgViewer->setTitleBarWidget(tmp6); + dock_hyperimgViewer->setTitleBarWidget(tmp6); - //升降桌dock - adjustTable* adt = new adjustTable(); + + initControlTabwidget(); - QDockWidget* dock_adt = new QDockWidget(QString::fromLocal8Bit("升降桌"), this); - dock_adt->setObjectName("mDockAdjustTable"); - dock_adt->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); - dock_adt->setWidget(adt); - mPanelMenu->addAction(dock_adt->toggleViewAction()); - - //电源控制 - PowerControl* pc = new PowerControl(); - - QDockWidget* dock_pc = new QDockWidget(QString::fromLocal8Bit("电源控制"), this); - dock_pc->setObjectName("mDockPowerControl"); - dock_pc->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); - dock_pc->setWidget(pc); - mPanelMenu->addAction(dock_pc->toggleViewAction()); - - //机械臂控制 - rac = new RobotArmControl(); - connect(rac->robotController, SIGNAL(hsiRecordSignal(int)), this, SLOT(recordFromRobotArm(int))); - QDockWidget* dock_rac = new QDockWidget(QString::fromLocal8Bit("机械臂控制"), this); - dock_rac->setObjectName("mDockRobotArmControl"); - dock_rac->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); - dock_rac->setWidget(rac); - mPanelMenu->addAction(dock_rac->toggleViewAction()); - - //一轴马达控制 - omc = new OneMotorControl(); - - dock_omc = new QDockWidget(QString::fromLocal8Bit("单轴控制"), this); - dock_omc->setObjectName("mDockOneMotorControl"); - dock_omc->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); - dock_omc->setWidget(omc); - mPanelMenu->addAction(dock_omc->toggleViewAction()); - - //2轴马达控制 - tmc = new TwoMotorControl(this); - connect(tmc, SIGNAL(startLineNumSignal(int)), this, SLOT(onCreateTab(int))); - connect(tmc, SIGNAL(sequenceComplete()), this, SLOT(onsequenceComplete())); - dock_tmc = new QDockWidget(QString::fromLocal8Bit("2轴控制"), this); - dock_tmc->setObjectName("mDockTwoMotorControl"); - dock_tmc->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); - dock_tmc->setWidget(tmc); - mPanelMenu->addAction(dock_tmc->toggleViewAction()); splitDockWidget(dock_layers, dock_hyperimgViewer, Qt::Horizontal); splitDockWidget(dock_hyperimgViewer, ui.mDockWidgetRGBCamera, Qt::Horizontal); @@ -461,16 +426,6 @@ HPPA::HPPA(QWidget* parent) splitDockWidget(ui.mDockWidgetRGBCamera, ui.mDockWidgetSpectrometer, Qt::Vertical); ui.mDockWidgetSpectrometer->show(); - tabifyDockWidget(ui.mDockWidgetSpectrometer, dock_omc); - tabifyDockWidget(dock_omc, dock_tmc); - tabifyDockWidget(dock_tmc, dock_rac); - tabifyDockWidget(dock_rac, dock_pc); - tabifyDockWidget(dock_pc, dock_adt); - - dock_tmc->close(); - dock_rac->close(); - dock_pc->close(); - dock_adt->close(); setStyleSheet(R"( QMainWindow::separator{ @@ -531,6 +486,40 @@ HPPA::HPPA(QWidget* parent) } } +void HPPA::initControlTabwidget() +{ + ui.controlTabWidget->removeTab(1); + + //升降桌dock + adjustTable* adt = new adjustTable(); + adt->setWindowFlags(Qt::Widget); + ui.controlTabWidget->addTab(adt, QString::fromLocal8Bit("升降桌")); + + + //电源控制 + PowerControl* pc = new PowerControl(); + pc->setWindowFlags(Qt::Widget); + ui.controlTabWidget->addTab(pc, QString::fromLocal8Bit("电源控制")); + + //机械臂控制 + rac = new RobotArmControl(); + connect(rac->robotController, SIGNAL(hsiRecordSignal(int)), this, SLOT(recordFromRobotArm(int))); + rac->setWindowFlags(Qt::Widget); + ui.controlTabWidget->addTab(rac, QString::fromLocal8Bit("机械臂控制")); + + //1轴马达控制 + omc = new OneMotorControl(); + omc->setWindowFlags(Qt::Widget); + ui.controlTabWidget->addTab(omc, QString::fromLocal8Bit("1轴马达控制")); + + //2轴马达控制 + tmc = new TwoMotorControl(this); + connect(tmc, SIGNAL(startLineNumSignal(int)), this, SLOT(onCreateTab(int))); + connect(tmc, SIGNAL(sequenceComplete()), this, SLOT(onsequenceComplete())); + tmc->setWindowFlags(Qt::Widget); + ui.controlTabWidget->addTab(tmc, QString::fromLocal8Bit("2轴控制")); +} + void HPPA::recordFromRobotArm(int fileCounter) { //qDebug() << "recordFromRobotArm" << fileCounter; @@ -686,7 +675,6 @@ void HPPA::createOneMotorScenario() } ui.mDockWidgetSpectrometer->show(); - dock_omc->show(); //tabifyDockWidget(ui.mDockWidgetSpectrometer, dock_omc); diff --git a/HPPA/HPPA.h b/HPPA/HPPA.h index a91594f..c948fb4 100644 --- a/HPPA/HPPA.h +++ b/HPPA/HPPA.h @@ -171,6 +171,7 @@ private: QMenu* mToolbarMenu = nullptr; void initPanelToolbar(); + void initControlTabwidget(); QLineEdit * frame_number; QLineEdit * m_FilenameLineEdit; @@ -219,10 +220,7 @@ private: RobotArmControl* rac; OneMotorControl* omc; - QDockWidget* dock_omc; - TwoMotorControl* tmc; - QDockWidget* dock_tmc; FILE* m_hTimesFile; diff --git a/HPPA/HPPA.ui b/HPPA/HPPA.ui index 88dc023..571e6b8 100644 --- a/HPPA/HPPA.ui +++ b/HPPA/HPPA.ui @@ -335,7 +335,7 @@ QToolBar QToolButton:hover { QDockWidget::AllDockWidgetFeatures - 绾挎у钩鍙颁綅缃ā鎷 + 3D妯″瀷 1 @@ -376,255 +376,283 @@ QToolBar QToolButton:hover { - + - 鍏夎氨浠 + 鎺у埗 2 - + - 9 + 0 - 9 + 0 - 9 + 0 - 9 + 0 - - 6 - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 100 - 20 - - - - - - - - Qt::Horizontal - - - - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 100 - 16777215 - - - - 甯х巼 - - - Qt::AlignCenter - - - - - - - - 0 - 0 - - - - background-color: rgb(255, 255, 255); - - - - - - - - - - - - 100 - 16777215 - - - - 绉垎鏃堕棿 - - - Qt::AlignCenter - - - - - - - - 0 - 0 - - - - background-color: rgb(255, 255, 255); - - - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 100 - 20 - - - - - - - - Qt::Horizontal - - - - - - - - - - - - 0 - 0 - - - - - 100 - 0 - - - - - 100 - 16777215 - - - - gain - - - Qt::AlignCenter - - - - - - - - 0 - 0 - - - - background-color: rgb(255, 255, 255); - - - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 100 - 20 - - - - - - - - - 0 - 0 - - - - Qt::Horizontal - - - - - - - - - Qt::Vertical + + + QTabWidget::South - - - 20 - 123 - - - + + + 鍏夎氨浠 + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 100 + 16777215 + + + + 甯х巼 + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + background-color: rgb(255, 255, 255); + + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 100 + 20 + + + + + + + + Qt::Horizontal + + + + + + + + + + + + 100 + 16777215 + + + + 绉垎鏃堕棿 + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + background-color: rgb(255, 255, 255); + + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 100 + 20 + + + + + + + + Qt::Horizontal + + + + + + + + + + + + 0 + 0 + + + + + 100 + 0 + + + + + 100 + 16777215 + + + + gain + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + background-color: rgb(255, 255, 255); + + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 100 + 20 + + + + + + + + + 0 + 0 + + + + Qt::Horizontal + + + + + + + + + Qt::Vertical + + + + 20 + 594 + + + + + + + + + Tab 2 + + + @@ -887,7 +915,13 @@ QToolBar QToolButton:hover { CustomDockWidgetBase QDockWidget -
customdockwidgetbase.h
+
customdockwidgetbase.h
+ 1 +
+ + CustomDockWidgetHideAbove + QDockWidget +
CustomDockWidgetBase.h
1
diff --git a/HPPA/HPPA.vcxproj.filters b/HPPA/HPPA.vcxproj.filters index f6e5a3b..70332c0 100644 --- a/HPPA/HPPA.vcxproj.filters +++ b/HPPA/HPPA.vcxproj.filters @@ -136,6 +136,9 @@ Source Files + + Source Files + @@ -230,6 +233,9 @@ Header Files + + Header Files +