From c9b8f01ad2e4960cb34f53b4ede72f3d36d43964 Mon Sep 17 00:00:00 2001 From: duanshengchao <519970194@qq.com> Date: Tue, 5 Nov 2024 15:17:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0dashboFrame=E7=B1=BB=EF=BC=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=A8=8B=E5=BA=8F=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 3 + include/dashboardFrame.h | 90 ++++++ include/dvieMainWindow.h | 54 +--- source/dashboardFrame.cpp | 389 ++++++++++++++++++++++++++ source/dvieMainWindow.cpp | 360 +----------------------- ui/dashboardFrame.ui | 557 ++++++++++++++++++++++++++++++++++++++ ui/dvieMainWindow.ui | 520 ----------------------------------- 7 files changed, 1046 insertions(+), 927 deletions(-) create mode 100644 include/dashboardFrame.h create mode 100644 source/dashboardFrame.cpp create mode 100644 ui/dashboardFrame.ui diff --git a/CMakeLists.txt b/CMakeLists.txt index 2cfc331..e983098 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,6 +32,7 @@ set(H_HEADER_FILES include/transparentMask.h include/messageDialog.h include/dashboard.h + include/dashboardFrame.h include/dashboardNamingDialog.h include/dataPanel.h include/panelSelectionDialog.h @@ -56,6 +57,7 @@ set(CPP_SOURCE_FILES source/transparentMask.cpp source/messageDialog.cpp source/dashboard.cpp + source/dashboardFrame.cpp source/dashboardNamingDialog.cpp source/dataPanel.cpp source/panelSelectionDialog.cpp @@ -72,6 +74,7 @@ set(UI_FILES ui/tccToolBox.ui ui/transparentMask.ui ui/messageDialog.ui + ui/dashboardFrame.ui ui/dashboardNamingDialog.ui ui/panelSelectionDialog.ui ui/panelConfigurationWidget.ui diff --git a/include/dashboardFrame.h b/include/dashboardFrame.h new file mode 100644 index 0000000..14e08be --- /dev/null +++ b/include/dashboardFrame.h @@ -0,0 +1,90 @@ +#ifndef DASHBOARDFRAME_H +#define DASHBOARDFRAME_H + +#include +#include "global.h" + +QT_BEGIN_NAMESPACE +namespace Ui { +class dashboardFrame; +} +QT_END_NAMESPACE + +class TransparentMask; +class MessageDialog; +class CustomTabBar; +class Dashboard; +class DashboardNamingDialog; +class PanelSelectionDialog; +class DateTimeWidget; + +namespace dashboardFrame { + enum frameType + { + ft_main = 0, + ft_secondary + }; +} + +class DashboardFrame : public QWidget +{ + Q_OBJECT + +public: + DashboardFrame(QWidget *parent = nullptr); + ~DashboardFrame(); + + void setType(dashboardFrame::frameType); + void addDashboard(const QString&); + void removeDashboard(const QString&, bool); + +private: + void showTransparentMask(); + void hideTransparentMask(); + + void setCurrentDashboard(const QString&); + +protected: + bool eventFilter(QObject*, QEvent*); + +public: + void showMessageDialog(MessageDialogType,const QString&,const QString&); + +public slots: + void onSignal_showMask(); + void onSignal_hideMask(); + + void onBtnClicked_addDashboard(); + void onBtnClicked_addDataPanel(); + void onBtnClicked_dashboardList(); + void onBtnClicked_dashboardTab(); + + void onMenuAction_dashboardList(); + + void onSignal_subDialogClose(); + void onSignal_renameDashboard(); + void onSignal_removeDashboard(); + void onSignal_dashboardNaming(const QString&, const QString&); + void onSignal_dashboardTabMoved(int, int); //拖动tab引发了位置变化 + void onSignal_panelSelectResult(const QString&); + + void onSignal_viewHistoricalData(QDateTime); + +private: + Ui::dashboardFrame* ui; + dashboardFrame::frameType m_type; + QWidget* m_pParentWindow; + TransparentMask* m_pTransparentMask; + MessageDialog* m_pMessageDialog; + CustomTabBar* m_pDashboardTabBar; + + QList m_listDashboard; + Dashboard* m_curActiveDashboard; + Dashboard* m_curOperationDashboard; + + DashboardNamingDialog* m_pDashboardNamingDialog; + PanelSelectionDialog* m_pPanelSelectionDialog; + DateTimeWidget* m_pDateTimeWidget; +}; + +#endif diff --git a/include/dvieMainWindow.h b/include/dvieMainWindow.h index 382fb3c..e500ac2 100644 --- a/include/dvieMainWindow.h +++ b/include/dvieMainWindow.h @@ -2,7 +2,6 @@ #define DVIEMAINWINDOW_H #include -#include "global.h" QT_BEGIN_NAMESPACE namespace Ui { @@ -10,13 +9,7 @@ class dvieMainWindow; } QT_END_NAMESPACE -class TransparentMask; -class MessageDialog; -class CustomTabBar; -class Dashboard; -class DashboardNamingDialog; -class PanelSelectionDialog; -class DateTimeWidget; +class DashboardFrame; class DvieMainWindow : public QMainWindow { @@ -26,53 +19,10 @@ public: DvieMainWindow(QWidget *parent = nullptr); ~DvieMainWindow(); -private: - void showTransparentMask(); - void hideTransparentMask(); - - void addDashboard(const QString&); - void removeDashboard(const QString&, bool); - void setCurrentDashboard(const QString&); - -protected: - bool eventFilter(QObject*, QEvent*); - -public: - void showMessageDialog(MessageDialogType,const QString&,const QString&); - -public slots: - void onSignal_showMask(); - void onSignal_hideMask(); - - void onBtnClicked_addDashboard(); - void onBtnClicked_addDataPanel(); - void onBtnClicked_dashboardList(); - void onBtnClicked_dashboardTab(); - - void onMenuAction_dashboardList(); - - void onSignal_subDialogClose(); - void onSignal_renameDashboard(); - void onSignal_removeDashboard(); - void onSignal_dashboardNaming(const QString&, const QString&); - void onSignal_dashboardTabMoved(int, int); //拖动tab引发了位置变化 - void onSignal_panelSelectResult(const QString&); - - void onSignal_viewHistoricalData(QDateTime); private: Ui::dvieMainWindow* ui; - TransparentMask* m_pTransparentMask; - MessageDialog* m_pMessageDialog; - CustomTabBar* m_pDashboardTabBar; - - QList m_listDashboard; - Dashboard* m_curActiveDashboard; - Dashboard* m_curOperationDashboard; - - DashboardNamingDialog* m_pDashboardNamingDialog; - PanelSelectionDialog* m_pPanelSelectionDialog; - DateTimeWidget* m_pDateTimeWidget; + DashboardFrame* m_pDashboardFrame; }; #endif diff --git a/source/dashboardFrame.cpp b/source/dashboardFrame.cpp new file mode 100644 index 0000000..8a62a80 --- /dev/null +++ b/source/dashboardFrame.cpp @@ -0,0 +1,389 @@ +#include "dashboardFrame.h" +#include "./ui_dashboardFrame.h" +#include "transparentMask.h" +#include "messageDialog.h" +#include "customTabBar.h" +#include "dashboard.h" +#include "customTab.h" +#include "dashboardNamingDialog.h" +#include "panelSelectionDialog.h" +#include "dateTimeWidget.h" + +#include +#include +#include + +DashboardFrame::DashboardFrame(QWidget *parent) + : QWidget(parent) + , ui(new Ui::dashboardFrame) + , m_pParentWindow(nullptr) + , m_pTransparentMask(nullptr) + , m_pMessageDialog(nullptr) + , m_pDashboardTabBar(nullptr) + , m_pDashboardNamingDialog(nullptr) + , m_curActiveDashboard(nullptr) + , m_curOperationDashboard(nullptr) + , m_pPanelSelectionDialog(nullptr) +{ + ui->setupUi(this); + + m_pParentWindow = parent; + m_type = dashboardFrame::ft_main; + + m_pDateTimeWidget = new DateTimeWidget(this); + ui->layout_dateTime->addWidget(m_pDateTimeWidget); + connect(m_pDateTimeWidget, SIGNAL(showMask()), this, SLOT(onSignal_showMask())); + connect(m_pDateTimeWidget, SIGNAL(hideMask()), this, SLOT(onSignal_hideMask())); + connect(m_pDateTimeWidget, SIGNAL(viewHistoricalData(QDateTime)), this, SLOT(onSignal_viewHistoricalData(QDateTime))); + + m_pDashboardTabBar = new CustomTabBar(this); + m_pDashboardTabBar->setObjectName("mainWindow_Bar"); + ui->hLayout_dashboardTabBar->addWidget(m_pDashboardTabBar); + connect(m_pDashboardTabBar, SIGNAL(tabMoved(int, int)), this, SLOT(onSignal_dashboardTabMoved(int, int))); + + connect(ui->btnAddDashboard, SIGNAL(clicked()), this, SLOT(onBtnClicked_addDashboard())); + connect(ui->btnAddPanel, SIGNAL(clicked()), this, SLOT(onBtnClicked_addDataPanel())); + //connect(ui->btnDashboradList1, SIGNAL(clicked()), this, SLOT(onBtnClicked_dashboardList())); + connect(ui->btnDashboradList2, SIGNAL(clicked()), this, SLOT(onBtnClicked_dashboardList())); +} + +DashboardFrame::~DashboardFrame() +{ + delete ui; +} + +void DashboardFrame::setType(dashboardFrame::frameType type) +{ + if(type == dashboardFrame::ft_secondary) //只有主window具有报警提示 + { + ui->btnEventNotication->setVisible(false); + ui->btnAlarmNoticatio->setVisible(false); + } + + m_type = type; +} + +bool DashboardFrame::eventFilter(QObject* obj, QEvent* event) +{ + QDialog *pDialog = qobject_cast(obj); + if(pDialog) + { + if(event->type() == QEvent::KeyPress) + { + QKeyEvent* pKeyEvent = static_cast(event); + if (pKeyEvent->key() == Qt::Key_Escape) + { + return true; + } + } + } + return QObject::eventFilter(obj, event); +} + +void DashboardFrame::showTransparentMask() +{ + if(m_pTransparentMask == nullptr) + m_pTransparentMask = new TransparentMask(this); + + QPoint originPoint = QPoint(0, 0); + if(m_pParentWindow) + originPoint = m_pParentWindow->mapToGlobal(QPoint(0, 0)); + else + originPoint = this->mapToGlobal(QPoint(0, 0)); + + m_pTransparentMask->setGeometry(originPoint.x(), originPoint.y(), this->width(), this->height()); + m_pTransparentMask->show(); +} +void DashboardFrame::hideTransparentMask() +{ + if(m_pTransparentMask != nullptr && m_pTransparentMask->isVisible()) + m_pTransparentMask->hide(); +} + +void DashboardFrame::showMessageDialog(MessageDialogType type,const QString& strTitle,const QString& strContent) +{ + if(m_pMessageDialog == nullptr) + { + m_pMessageDialog = new MessageDialog(this); + m_pMessageDialog->installEventFilter(this); + connect(m_pMessageDialog, SIGNAL(sgl_hide()), this, SLOT(onSignal_subDialogClose())); + } + + m_pMessageDialog->setMessage(type, strTitle, strContent); + // QPoint originPoint = this->mapToGlobal(QPoint(0, 0)); + // int nX = originPoint.x() + (this->width() - m_pMessageDialog->width()) * 0.5; + // int nY = originPoint.y() + (this->height() - m_pMessageDialog->height()) * 0.5; + QPoint originPoint = ui->navigationPanel->mapToGlobal(QPoint(0, 0)); + int nX = originPoint.x() + (ui->navigationPanel->width() - m_pMessageDialog->width()) * 0.5; + int nY = originPoint.y() + ui->navigationPanel->height() * 0.5; + m_pMessageDialog->setGeometry(nX, nY, m_pMessageDialog->width(), m_pMessageDialog->height()); + if(type == type_question) + m_pMessageDialog->exec(); + else + m_pMessageDialog->show(); +} + +void DashboardFrame::addDashboard(const QString& strName) +{ + Dashboard* dashboard = new Dashboard(strName, this); + connect(dashboard, SIGNAL(sgl_rename()), this, SLOT(onSignal_renameDashboard())); + connect(dashboard, SIGNAL(sgl_remove()), this, SLOT(onSignal_removeDashboard())); + dashboard->setDisplayAreaLayout(ui->hLayout_dashboardDisplayArea); + + //添加tab + CustomTab* tab = dashboard->tab(); + m_pDashboardTabBar->addTab(tab); + connect(tab, SIGNAL(clicked()), this, SLOT(onBtnClicked_dashboardTab())); + + m_listDashboard.push_back(dashboard); + if(m_curActiveDashboard) + m_curActiveDashboard->setActive(false); + dashboard->setActive(true); + m_curActiveDashboard = dashboard; +} + +void DashboardFrame::removeDashboard(const QString& strName, bool bDelete) //右键删除和移动到别的frame下均会调用该函数,只有删除时才会delete +{ + int nIndex = 0; + Dashboard* dashboard = nullptr; + for(int n=0; ngetName() == strName) + { + nIndex = n; + dashboard = m_listDashboard.at(n); + break; + } + } + if( !dashboard ) + return; + + if(dashboard == m_curActiveDashboard) //删除的是当前所选 + { + dashboard->setActive(false); + if(m_listDashboard.count() == 1) //唯一一个 + m_curActiveDashboard = nullptr; + else + { + if(nIndex != 0) //不是第一个,将其前一个置为选中状态 + { + m_listDashboard.at(nIndex - 1)->setActive(true); + m_curActiveDashboard = m_listDashboard.at(nIndex - 1); + } + else //是第一个,将下一个置为选中状态 + { + m_listDashboard.at(nIndex + 1)->setActive(true); + m_curActiveDashboard = m_listDashboard.at(nIndex + 1); + } + } + } + + CustomTab* tab = dashboard->tab(); + if(tab) + m_pDashboardTabBar->removeTab(tab); + m_listDashboard.removeAt(nIndex); + if(bDelete) + { + dashboard->deleteSubWidgets(); + delete dashboard; + } +} + +void DashboardFrame::setCurrentDashboard(const QString& strName) +{ + for(int n=0; ngetName() == strName) + { + if(m_listDashboard.at(n) == m_curActiveDashboard) + return; + + m_curActiveDashboard->setActive(false); + m_listDashboard.at(n)->setActive(true); + CustomTab* tab = m_listDashboard.at(n)->tab(); + m_pDashboardTabBar->ensureWidgetVisible(tab); + m_curActiveDashboard = m_listDashboard.at(n); + } + } +} + +void DashboardFrame::onSignal_showMask() +{ + showTransparentMask(); +} +void DashboardFrame::onSignal_hideMask() +{ + hideTransparentMask(); +} + +void DashboardFrame::onBtnClicked_addDashboard() +{ + if(m_pDashboardNamingDialog == nullptr) + { + m_pDashboardNamingDialog = new DashboardNamingDialog(this); + m_pDashboardNamingDialog->installEventFilter(this); + connect(m_pDashboardNamingDialog, SIGNAL(sgl_hide()), this, SLOT(onSignal_subDialogClose())); + connect(m_pDashboardNamingDialog, SIGNAL(dashboardName(const QString&, const QString&)), this, SLOT(onSignal_dashboardNaming(const QString&, const QString&))); + } + + showTransparentMask(); + QPoint originPoint = ui->navigationPanel->mapToGlobal(QPoint(0, 0)); + int nX = originPoint.x() + (ui->navigationPanel->width() - m_pDashboardNamingDialog->width()) * 0.5; + int nY = originPoint.y() + ui->navigationPanel->height() * 0.5; + m_pDashboardNamingDialog->setGeometry(nX, nY, m_pDashboardNamingDialog->width(), m_pDashboardNamingDialog->height()); + m_pDashboardNamingDialog->showUsedForCreat(); +} + +void DashboardFrame::onBtnClicked_addDataPanel() +{ + if(m_listDashboard.count() == 0) + { + showTransparentMask(); + showMessageDialog(type_warning, QString::fromWCharArray(L"错误"), QString::fromWCharArray(L"只能在数据看板内创建展项,请先创建一个数据看板")); + return; + } + + if(m_pPanelSelectionDialog == nullptr) + { + m_pPanelSelectionDialog = new PanelSelectionDialog(this); + m_pPanelSelectionDialog->installEventFilter(this); + connect(m_pPanelSelectionDialog, SIGNAL(sgl_hide()), this, SLOT(onSignal_subDialogClose())); + connect(m_pPanelSelectionDialog, SIGNAL(panelType(const QString&)), this, SLOT(onSignal_panelSelectResult(const QString&))); + } + + showTransparentMask(); + QPoint originPoint = ui->navigationPanel->mapToGlobal(QPoint(0, 0)); + int nX = originPoint.x() + (ui->navigationPanel->width() - m_pPanelSelectionDialog->width()) * 0.5; + int nY = originPoint.y() + ui->navigationPanel->height() * 0.5; + m_pPanelSelectionDialog->setGeometry(nX, nY, m_pPanelSelectionDialog->width(), m_pPanelSelectionDialog->height()); + m_pPanelSelectionDialog->show(); +} + +void DashboardFrame::onBtnClicked_dashboardList() +{ + if(m_listDashboard.count() ==0 ) + return; + + QMenu menu; + menu.setStyleSheet("QMenu{\n" + " background-color:rgb(36,43,50);\n" + " border:1px solid rgb(6, 6, 6);\n" + "}\n" + "QMenu:scroller{\n" + " show-arrows:true;\n" + "}\n" + "QMenu:item{\n" + " padding-left:15px;\n" + " padding-right:15px;\n" + " font:9pt \"微软雅黑\";\n" + " color:rgb(220,220,220);\n" + " height:26px;\n" + "}\n" + "QMenu:item:selected{\n" + " background-color: rgba(67,160,249, 80);\n" + "}\n"); + for(int n=0; ngetName(), this, SLOT(onMenuAction_dashboardList())); + } + + QPoint originPoint = ui->btnDashboradList2->mapToGlobal(QPoint(0, 0)); + int nX = originPoint.x(); + originPoint = ui->navigationPanel->mapToGlobal(QPoint(0, 0)); + int nY = originPoint.y() + ui->navigationPanel->height(); + menu.exec(QPoint(nX, nY)); +} + +void DashboardFrame::onBtnClicked_dashboardTab() +{ + CustomTab* pBtn = qobject_cast(sender()); + QString strName = pBtn->text(); + setCurrentDashboard(strName); +} + +void DashboardFrame::onMenuAction_dashboardList() +{ + QAction* action = qobject_cast(sender()); + QString strName = action->text(); + setCurrentDashboard(strName); +} + +void DashboardFrame::onSignal_subDialogClose() +{ + hideTransparentMask(); +} + +void DashboardFrame::onSignal_dashboardNaming(const QString& strName, const QString& strUsedFor) +{ + for(int n=0; ngetName() == strName) + { + QString strError = QString::fromStdWString(L"已存在同名看板"); + m_pDashboardNamingDialog->showErrorInfo(strError); + return; + } + } + + if(strUsedFor == "create") + addDashboard(strName); + else if(strUsedFor == "rename" && m_curOperationDashboard) + m_curOperationDashboard->setName(strName); + m_pDashboardNamingDialog->hide(); + hideTransparentMask(); +} + +void DashboardFrame::onSignal_dashboardTabMoved(int nFromIndex, int nToIndex) +{ + //同步相应数据在其存储接结构中的位置 + Dashboard* movingDashboard = m_listDashboard.takeAt(nFromIndex); + m_listDashboard.insert(nToIndex, movingDashboard); +} + +void DashboardFrame::onSignal_removeDashboard() +{ + Dashboard* dashboard = qobject_cast(sender()); + if(dashboard) + { + showTransparentMask(); + QString strName = dashboard->getName(); + QString strMsg = QString::fromStdWString(L"确认删除名为 \"") + strName + QString::fromStdWString(L"\" 的数据看板吗?"); + showMessageDialog(type_question, QString::fromStdWString(L"删除看板"), strMsg); + if(g_msgDlgBtn == btn_No) + return; + + removeDashboard(strName, true); + } +} + +void DashboardFrame::onSignal_renameDashboard() +{ + m_curOperationDashboard = qobject_cast(sender()); + + if(m_pDashboardNamingDialog == nullptr) + { + m_pDashboardNamingDialog = new DashboardNamingDialog(this); + connect(m_pDashboardNamingDialog, SIGNAL(dlgHide()), this, SLOT(onSignal_subDialogClose())); + connect(m_pDashboardNamingDialog, SIGNAL(dashboardName(const QString&, const QString&)), this, SLOT(onSignal_dashboardNaming(const QString&, const QString&))); + } + + showTransparentMask(); + QPoint originPoint = ui->navigationPanel->mapToGlobal(QPoint(0, 0)); + int nX = originPoint.x() + (ui->navigationPanel->width() - m_pDashboardNamingDialog->width()) * 0.5; + int nY = originPoint.y() + ui->navigationPanel->height() * 0.5; + m_pDashboardNamingDialog->setGeometry(nX, nY, m_pDashboardNamingDialog->width(), m_pDashboardNamingDialog->height()); + m_pDashboardNamingDialog->showUsedForRename(); +} + +void DashboardFrame::onSignal_panelSelectResult(const QString& strType) +{ + //m_pPanelSelectionDialog->hide(); + hideTransparentMask(); + m_curActiveDashboard->addPanel(strType); +} + +void DashboardFrame::onSignal_viewHistoricalData(QDateTime dateTime) +{ + qDebug() << "viewHistoricalData: " + dateTime.date().toString("yyyy/MM/dd"); + hideTransparentMask(); +} diff --git a/source/dvieMainWindow.cpp b/source/dvieMainWindow.cpp index 99507ba..d601b70 100644 --- a/source/dvieMainWindow.cpp +++ b/source/dvieMainWindow.cpp @@ -1,48 +1,17 @@ #include "dvieMainWindow.h" #include "./ui_dvieMainWindow.h" -#include "transparentMask.h" -#include "messageDialog.h" -#include "customTabBar.h" -#include "dashboard.h" -#include "customTab.h" -#include "dashboardNamingDialog.h" -#include "panelSelectionDialog.h" -#include "dateTimeWidget.h" - -#include -#include -#include -#include -#include +#include "dashboardFrame.h" DvieMainWindow::DvieMainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::dvieMainWindow) - , m_pTransparentMask(nullptr) - , m_pMessageDialog(nullptr) - , m_pDashboardTabBar(nullptr) - , m_pDashboardNamingDialog(nullptr) - , m_curActiveDashboard(nullptr) - , m_curOperationDashboard(nullptr) - , m_pPanelSelectionDialog(nullptr) + , m_pDashboardFrame(nullptr) + { ui->setupUi(this); - m_pDateTimeWidget = new DateTimeWidget(this); - ui->layout_dateTime->addWidget(m_pDateTimeWidget); - connect(m_pDateTimeWidget, SIGNAL(showMask()), this, SLOT(onSignal_showMask())); - connect(m_pDateTimeWidget, SIGNAL(hideMask()), this, SLOT(onSignal_hideMask())); - connect(m_pDateTimeWidget, SIGNAL(viewHistoricalData(QDateTime)), this, SLOT(onSignal_viewHistoricalData(QDateTime))); - - m_pDashboardTabBar = new CustomTabBar(this); - m_pDashboardTabBar->setObjectName("mainWindow_Bar"); - ui->hLayout_dashboardTabBar->addWidget(m_pDashboardTabBar); - connect(m_pDashboardTabBar, SIGNAL(tabMoved(int, int)), this, SLOT(onSignal_dashboardTabMoved(int, int))); - - connect(ui->btnAddDashboard, SIGNAL(clicked()), this, SLOT(onBtnClicked_addDashboard())); - connect(ui->btnAddPanel, SIGNAL(clicked()), this, SLOT(onBtnClicked_addDataPanel())); - //connect(ui->btnDashboradList1, SIGNAL(clicked()), this, SLOT(onBtnClicked_dashboardList())); - connect(ui->btnDashboradList2, SIGNAL(clicked()), this, SLOT(onBtnClicked_dashboardList())); + m_pDashboardFrame = new DashboardFrame(this); + ui->centralLayout->addWidget(m_pDashboardFrame); } DvieMainWindow::~DvieMainWindow() @@ -50,322 +19,3 @@ DvieMainWindow::~DvieMainWindow() delete ui; } -bool DvieMainWindow::eventFilter(QObject* obj, QEvent* event) -{ - QDialog *pDialog = qobject_cast(obj); - if(pDialog) - { - if(event->type() == QEvent::KeyPress) - { - QKeyEvent* pKeyEvent = static_cast(event); - if (pKeyEvent->key() == Qt::Key_Escape) - { - return true; - } - } - } - return QObject::eventFilter(obj, event); -} - -void DvieMainWindow::showTransparentMask() -{ - if(m_pTransparentMask == nullptr) - m_pTransparentMask = new TransparentMask(this); - - QPoint originPoint = this->mapToGlobal(QPoint(0, 0)); - m_pTransparentMask->setGeometry(originPoint.x(), originPoint.y(), this->width(), this->height()); - m_pTransparentMask->show(); -} -void DvieMainWindow::hideTransparentMask() -{ - if(m_pTransparentMask != nullptr && m_pTransparentMask->isVisible()) - m_pTransparentMask->hide(); -} - -void DvieMainWindow::showMessageDialog(MessageDialogType type,const QString& strTitle,const QString& strContent) -{ - if(m_pMessageDialog == nullptr) - { - m_pMessageDialog = new MessageDialog(this); - m_pMessageDialog->installEventFilter(this); - connect(m_pMessageDialog, SIGNAL(sgl_hide()), this, SLOT(onSignal_subDialogClose())); - } - - m_pMessageDialog->setMessage(type, strTitle, strContent); - // QPoint originPoint = this->mapToGlobal(QPoint(0, 0)); - // int nX = originPoint.x() + (this->width() - m_pMessageDialog->width()) * 0.5; - // int nY = originPoint.y() + (this->height() - m_pMessageDialog->height()) * 0.5; - QPoint originPoint = ui->navigationPanel->mapToGlobal(QPoint(0, 0)); - int nX = originPoint.x() + (ui->navigationPanel->width() - m_pMessageDialog->width()) * 0.5; - int nY = originPoint.y() + ui->navigationPanel->height() * 0.5; - m_pMessageDialog->setGeometry(nX, nY, m_pMessageDialog->width(), m_pMessageDialog->height()); - if(type == type_question) - m_pMessageDialog->exec(); - else - m_pMessageDialog->show(); -} - -void DvieMainWindow::addDashboard(const QString& strName) -{ - Dashboard* dashboard = new Dashboard(strName, this); - connect(dashboard, SIGNAL(sgl_rename()), this, SLOT(onSignal_renameDashboard())); - connect(dashboard, SIGNAL(sgl_remove()), this, SLOT(onSignal_removeDashboard())); - dashboard->setDisplayAreaLayout(ui->hLayout_dashboardDisplayArea); - - //添加tab - CustomTab* tab = dashboard->tab(); - m_pDashboardTabBar->addTab(tab); - connect(tab, SIGNAL(clicked()), this, SLOT(onBtnClicked_dashboardTab())); - - m_listDashboard.push_back(dashboard); - if(m_curActiveDashboard) - m_curActiveDashboard->setActive(false); - dashboard->setActive(true); - m_curActiveDashboard = dashboard; -} - -void DvieMainWindow::removeDashboard(const QString& strName, bool bDelete) //右键删除和移动到别的frame下均会调用该函数,只有删除时才会delete -{ - int nIndex = 0; - Dashboard* dashboard = nullptr; - for(int n=0; ngetName() == strName) - { - nIndex = n; - dashboard = m_listDashboard.at(n); - break; - } - } - if( !dashboard ) - return; - - if(dashboard == m_curActiveDashboard) //删除的是当前所选 - { - dashboard->setActive(false); - if(m_listDashboard.count() == 1) //唯一一个 - m_curActiveDashboard = nullptr; - else - { - if(nIndex != 0) //不是第一个,将其前一个置为选中状态 - { - m_listDashboard.at(nIndex - 1)->setActive(true); - m_curActiveDashboard = m_listDashboard.at(nIndex - 1); - } - else //是第一个,将下一个置为选中状态 - { - m_listDashboard.at(nIndex + 1)->setActive(true); - m_curActiveDashboard = m_listDashboard.at(nIndex + 1); - } - } - } - - CustomTab* tab = dashboard->tab(); - if(tab) - m_pDashboardTabBar->removeTab(tab); - m_listDashboard.removeAt(nIndex); - if(bDelete) - { - dashboard->deleteSubWidgets(); - delete dashboard; - } -} - -void DvieMainWindow::setCurrentDashboard(const QString& strName) -{ - for(int n=0; ngetName() == strName) - { - if(m_listDashboard.at(n) == m_curActiveDashboard) - return; - - m_curActiveDashboard->setActive(false); - m_listDashboard.at(n)->setActive(true); - CustomTab* tab = m_listDashboard.at(n)->tab(); - m_pDashboardTabBar->ensureWidgetVisible(tab); - m_curActiveDashboard = m_listDashboard.at(n); - } - } -} - -void DvieMainWindow::onSignal_showMask() -{ - showTransparentMask(); -} -void DvieMainWindow::onSignal_hideMask() -{ - hideTransparentMask(); -} - -void DvieMainWindow::onBtnClicked_addDashboard() -{ - if(m_pDashboardNamingDialog == nullptr) - { - m_pDashboardNamingDialog = new DashboardNamingDialog(this); - m_pDashboardNamingDialog->installEventFilter(this); - connect(m_pDashboardNamingDialog, SIGNAL(sgl_hide()), this, SLOT(onSignal_subDialogClose())); - connect(m_pDashboardNamingDialog, SIGNAL(dashboardName(const QString&, const QString&)), this, SLOT(onSignal_dashboardNaming(const QString&, const QString&))); - } - - showTransparentMask(); - QPoint originPoint = ui->navigationPanel->mapToGlobal(QPoint(0, 0)); - int nX = originPoint.x() + (ui->navigationPanel->width() - m_pDashboardNamingDialog->width()) * 0.5; - int nY = originPoint.y() + ui->navigationPanel->height() * 0.5; - m_pDashboardNamingDialog->setGeometry(nX, nY, m_pDashboardNamingDialog->width(), m_pDashboardNamingDialog->height()); - m_pDashboardNamingDialog->showUsedForCreat(); -} - -void DvieMainWindow::onBtnClicked_addDataPanel() -{ - if(m_listDashboard.count() == 0) - { - showTransparentMask(); - showMessageDialog(type_warning, QString::fromWCharArray(L"错误"), QString::fromWCharArray(L"只能在数据看板内创建展项,请先创建一个数据看板")); - return; - } - - if(m_pPanelSelectionDialog == nullptr) - { - m_pPanelSelectionDialog = new PanelSelectionDialog(this); - m_pPanelSelectionDialog->installEventFilter(this); - connect(m_pPanelSelectionDialog, SIGNAL(sgl_hide()), this, SLOT(onSignal_subDialogClose())); - connect(m_pPanelSelectionDialog, SIGNAL(panelType(const QString&)), this, SLOT(onSignal_panelSelectResult(const QString&))); - } - - showTransparentMask(); - QPoint originPoint = ui->navigationPanel->mapToGlobal(QPoint(0, 0)); - int nX = originPoint.x() + (ui->navigationPanel->width() - m_pPanelSelectionDialog->width()) * 0.5; - int nY = originPoint.y() + ui->navigationPanel->height() * 0.5; - m_pPanelSelectionDialog->setGeometry(nX, nY, m_pPanelSelectionDialog->width(), m_pPanelSelectionDialog->height()); - m_pPanelSelectionDialog->show(); -} - -void DvieMainWindow::onBtnClicked_dashboardList() -{ - if(m_listDashboard.count() ==0 ) - return; - - QMenu menu; - menu.setStyleSheet("QMenu{\n" - " background-color:rgb(36,43,50);\n" - " border:1px solid rgb(6, 6, 6);\n" - "}\n" - "QMenu:scroller{\n" - " show-arrows:true;\n" - "}\n" - "QMenu:item{\n" - " padding-left:15px;\n" - " padding-right:15px;\n" - " font:9pt \"微软雅黑\";\n" - " color:rgb(220,220,220);\n" - " height:26px;\n" - "}\n" - "QMenu:item:selected{\n" - " background-color: rgba(67,160,249, 80);\n" - "}\n"); - for(int n=0; ngetName(), this, SLOT(onMenuAction_dashboardList())); - } - - QPoint originPoint = ui->btnDashboradList2->mapToGlobal(QPoint(0, 0)); - int nX = originPoint.x(); - originPoint = ui->navigationPanel->mapToGlobal(QPoint(0, 0)); - int nY = originPoint.y() + ui->navigationPanel->height(); - menu.exec(QPoint(nX, nY)); -} - -void DvieMainWindow::onBtnClicked_dashboardTab() -{ - CustomTab* pBtn = qobject_cast(sender()); - QString strName = pBtn->text(); - setCurrentDashboard(strName); -} - -void DvieMainWindow::onMenuAction_dashboardList() -{ - QAction* action = qobject_cast(sender()); - QString strName = action->text(); - setCurrentDashboard(strName); -} - -void DvieMainWindow::onSignal_subDialogClose() -{ - hideTransparentMask(); -} - -void DvieMainWindow::onSignal_dashboardNaming(const QString& strName, const QString& strUsedFor) -{ - for(int n=0; ngetName() == strName) - { - QString strError = QString::fromStdWString(L"已存在同名看板"); - m_pDashboardNamingDialog->showErrorInfo(strError); - return; - } - } - - if(strUsedFor == "create") - addDashboard(strName); - else if(strUsedFor == "rename" && m_curOperationDashboard) - m_curOperationDashboard->setName(strName); - m_pDashboardNamingDialog->hide(); - hideTransparentMask(); -} - -void DvieMainWindow::onSignal_dashboardTabMoved(int nFromIndex, int nToIndex) -{ - //同步相应数据在其存储接结构中的位置 - Dashboard* movingDashboard = m_listDashboard.takeAt(nFromIndex); - m_listDashboard.insert(nToIndex, movingDashboard); -} - -void DvieMainWindow::onSignal_removeDashboard() -{ - Dashboard* dashboard = qobject_cast(sender()); - if(dashboard) - { - showTransparentMask(); - QString strName = dashboard->getName(); - QString strMsg = QString::fromStdWString(L"确认删除名为 \"") + strName + QString::fromStdWString(L"\" 的数据看板吗?"); - showMessageDialog(type_question, QString::fromStdWString(L"删除看板"), strMsg); - if(g_msgDlgBtn == btn_No) - return; - - removeDashboard(strName, true); - } -} - -void DvieMainWindow::onSignal_renameDashboard() -{ - m_curOperationDashboard = qobject_cast(sender()); - - if(m_pDashboardNamingDialog == nullptr) - { - m_pDashboardNamingDialog = new DashboardNamingDialog(this); - connect(m_pDashboardNamingDialog, SIGNAL(dlgHide()), this, SLOT(onSignal_subDialogClose())); - connect(m_pDashboardNamingDialog, SIGNAL(dashboardName(const QString&, const QString&)), this, SLOT(onSignal_dashboardNaming(const QString&, const QString&))); - } - - showTransparentMask(); - QPoint originPoint = ui->navigationPanel->mapToGlobal(QPoint(0, 0)); - int nX = originPoint.x() + (ui->navigationPanel->width() - m_pDashboardNamingDialog->width()) * 0.5; - int nY = originPoint.y() + ui->navigationPanel->height() * 0.5; - m_pDashboardNamingDialog->setGeometry(nX, nY, m_pDashboardNamingDialog->width(), m_pDashboardNamingDialog->height()); - m_pDashboardNamingDialog->showUsedForRename(); -} - -void DvieMainWindow::onSignal_panelSelectResult(const QString& strType) -{ - //m_pPanelSelectionDialog->hide(); - hideTransparentMask(); - m_curActiveDashboard->addPanel(strType); -} - -void DvieMainWindow::onSignal_viewHistoricalData(QDateTime dateTime) -{ - qDebug() << "viewHistoricalData: " + dateTime.date().toString("yyyy/MM/dd"); - hideTransparentMask(); -} diff --git a/ui/dashboardFrame.ui b/ui/dashboardFrame.ui new file mode 100644 index 0000000..ac1c990 --- /dev/null +++ b/ui/dashboardFrame.ui @@ -0,0 +1,557 @@ + + + dashboardFrame + + + + 0 + 0 + 1448 + 867 + + + + Form + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 0 + + + + + + 220 + 131 + + + + + 16777215 + 131 + + + + background-color: rgba(0, 141, 212, 80); + + + + + + + + 185 + 0 + + + + + 185 + 131 + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + 350 + 131 + + + + + + + + + + + 165 + 55 + + + + + 165 + 55 + + + + QPushButton +{ +font: 700 12pt "微软雅黑"; +color:rgb(250,250,250); +text-align:right; +padding-right:40px; +background-color: rgb(200, 68, 56); +icon-size:20px; +icon: url(:/images/icon_event.png); +} +QPushButton:hover +{ +background-color: rgb(166, 56, 46); +} +QPushButton:pressed +{ +background-color: rgb(128, 43, 36); +} + + + + 事件(0) + + + false + + + + + + + + 165 + 55 + + + + + 165 + 55 + + + + QPushButton +{ +font: 700 12pt "微软雅黑"; +color:rgb(250,250,250); +text-align:right; +padding-right:35px; +background-color: rgb(64, 182, 113); +icon-size:20px; +icon: url(:/images/icon_add.png); +} +QPushButton:hover +{ +background-color: rgb(52, 145, 94); +} +QPushButton:pressed +{ +background-color: rgb(39, 102, 59); +} + + + + 数据看板 + + + false + + + + + + + + 165 + 55 + + + + + 165 + 55 + + + + QPushButton +{ +font: 700 12pt "微软雅黑"; +color:rgb(250,250,250); +text-align:right; +padding-right:20px; +background-color: rgb(200, 68, 56); +icon-size:20px; +icon: url(:/images/icon_alarm.png); +} +QPushButton:hover +{ +background-color: rgb(166, 56, 46); +} +QPushButton:pressed +{ +background-color: rgb(128, 43, 36); +} + + + + 报警(10+) + + + + + + + + 165 + 55 + + + + + 165 + 55 + + + + QPushButton +{ +font: 700 12pt "微软雅黑"; +color:rgb(250,250,250); +text-align:right; +padding-right:35px; +background-color: rgb(64, 182, 113); +icon-size:20px; +icon: url(:/images/icon_add.png); +} +QPushButton:hover +{ +background-color: rgb(52, 145, 94); +} +QPushButton:pressed +{ +background-color: rgb(39, 102, 59); +} + + + + 数据展项 + + + + + + + + + + + + + 0 + 50 + + + + + 16777215 + 50 + + + + QWidget #navigationPanel +{ +border-top:1px solid rgb(76,88,105); +border-bottom:1px solid rgb(76,88,105); +background-color:rgb(36,43,50); +} + + + + + 6 + + + 0 + + + 0 + + + + + + 200 + 30 + + + + + 200 + 30 + + + + color: rgb(250, 250, 250); +font: 700 11pt "微软雅黑"; +border:1px solid rgb(200,200,200); +border-left:0px; +border-top:0px; +border-bottom:0px; + + + 实时数据监控 + + + + + + + background-color:transparent; + + + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 0 + + + + + + 30 + 30 + + + + + 30 + 30 + + + + ArrowCursor + + + QPushButton +{ + padding:2px; + image: url(:/images/icon_dashboards2.png); +} +QPushButton:hover +{ +} +QPushButton:pressed +{ +} + + + + + + true + + + + + + + + 30 + 30 + + + + + 30 + 30 + + + + QPushButton +{ + padding:2px; + image: url(:/images/icon_greater-than.png); +} +QPushButton:hover +{ + padding:0px; +} +QPushButton:pressed +{ + padding:2px; +} + + + + + + true + + + + + + + + + + + + + + + 30 + 30 + + + + + 30 + 30 + + + + QPushButton +{ + padding:1px; + image: url(:/images/icon_dashboards_selected.png); +} +QPushButton:hover +{ + padding:0px; +} +QPushButton:pressed +{ + padding:1px; +} + + + + + + true + + + + + + + + 30 + 30 + + + + + 30 + 30 + + + + QPushButton +{ + padding:1px; + image: url(:/images/icon_notifications.png); +} +QPushButton:hover +{ + padding:0px; +} +QPushButton:pressed +{ + padding:1px; +} + + + + + + true + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + + diff --git a/ui/dvieMainWindow.ui b/ui/dvieMainWindow.ui index e52e18a..bb00df8 100644 --- a/ui/dvieMainWindow.ui +++ b/ui/dvieMainWindow.ui @@ -314,526 +314,6 @@ QPushButton:pressed - - - - 0 - - - - - - 220 - 131 - - - - - 16777215 - 131 - - - - background-color: rgba(0, 141, 212, 80); - - - - - - - - 185 - 0 - - - - - 185 - 131 - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - - - 350 - 131 - - - - - 350 - 131 - - - - - - - - - 10 - 10 - 165 - 55 - - - - - 165 - 55 - - - - QPushButton -{ -font: 700 12pt "微软雅黑"; -color:rgb(250,250,250); -text-align:right; -padding-right:40px; -background-color: rgb(200, 68, 56); -icon-size:20px; -icon: url(:/images/icon_event.png); -} -QPushButton:hover -{ -background-color: rgb(166, 56, 46); -} -QPushButton:pressed -{ -background-color: rgb(128, 43, 36); -} - - - - 事件(0) - - - false - - - - - - 10 - 70 - 165 - 55 - - - - - 165 - 55 - - - - QPushButton -{ -font: 700 12pt "微软雅黑"; -color:rgb(250,250,250); -text-align:right; -padding-right:20px; -background-color: rgb(200, 68, 56); -icon-size:20px; -icon: url(:/images/icon_alarm.png); -} -QPushButton:hover -{ -background-color: rgb(166, 56, 46); -} -QPushButton:pressed -{ -background-color: rgb(128, 43, 36); -} - - - - 报警(10+) - - - - - - 180 - 70 - 165 - 55 - - - - - 165 - 55 - - - - QPushButton -{ -font: 700 12pt "微软雅黑"; -color:rgb(250,250,250); -text-align:right; -padding-right:35px; -background-color: rgb(64, 182, 113); -icon-size:20px; -icon: url(:/images/icon_add.png); -} -QPushButton:hover -{ -background-color: rgb(52, 145, 94); -} -QPushButton:pressed -{ -background-color: rgb(39, 102, 59); -} - - - - 数据展项 - - - - - - 180 - 10 - 165 - 55 - - - - - 165 - 55 - - - - QPushButton -{ -font: 700 12pt "微软雅黑"; -color:rgb(250,250,250); -text-align:right; -padding-right:35px; -background-color: rgb(64, 182, 113); -icon-size:20px; -icon: url(:/images/icon_add.png); -} -QPushButton:hover -{ -background-color: rgb(52, 145, 94); -} -QPushButton:pressed -{ -background-color: rgb(39, 102, 59); -} - - - - 数据看板 - - - false - - - - - - - - - - - 0 - 50 - - - - - 16777215 - 50 - - - - QWidget #navigationPanel -{ -border-top:1px solid rgb(76,88,105); -border-bottom:1px solid rgb(76,88,105); -background-color:rgb(36,43,50); -} - - - - - 6 - - - 0 - - - 0 - - - - - - 200 - 30 - - - - - 200 - 30 - - - - color: rgb(250, 250, 250); -font: 700 11pt "微软雅黑"; -border:1px solid rgb(200,200,200); -border-left:0px; -border-top:0px; -border-bottom:0px; - - - 实时数据监控 - - - - - - - background-color:transparent; - - - 0 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 0 - - - - - - 30 - 30 - - - - - 30 - 30 - - - - ArrowCursor - - - QPushButton -{ - padding:2px; - image: url(:/images/icon_dashboards2.png); -} -QPushButton:hover -{ -} -QPushButton:pressed -{ -} - - - - - - true - - - - - - - - 30 - 30 - - - - - 30 - 30 - - - - QPushButton -{ - padding:2px; - image: url(:/images/icon_greater-than.png); -} -QPushButton:hover -{ - padding:0px; -} -QPushButton:pressed -{ - padding:2px; -} - - - - - - true - - - - - - - - - - - - - - - 30 - 30 - - - - - 30 - 30 - - - - QPushButton -{ - padding:1px; - image: url(:/images/icon_dashboards_selected.png); -} -QPushButton:hover -{ - padding:0px; -} -QPushButton:pressed -{ - padding:1px; -} - - - - - - true - - - - - - - - 30 - 30 - - - - - 30 - 30 - - - - QPushButton -{ - padding:1px; - image: url(:/images/icon_notifications.png); -} -QPushButton:hover -{ - padding:0px; -} -QPushButton:pressed -{ - padding:1px; -} - - - - - - true - - - - - - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - -