From 2c4a54738bb0595b5e121dee81b5106da7ef4f3a Mon Sep 17 00:00:00 2001 From: duanshengchao <519970194@qq.com> Date: Wed, 20 Nov 2024 16:57:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=A8=8B=E5=BA=8F=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E9=81=AE=E7=BD=A9=E5=92=8C=E5=AD=90=E7=AA=97=E5=8F=A3?= =?UTF-8?q?=E5=9C=A8x11=E4=B8=8B=E7=9A=84=E6=AD=A3=E5=B8=B8=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/dvieMainWindow.h | 5 +++ include/dvieSecondaryWindow.h | 5 +++ source/dashboardFrame.cpp | 67 +++++++++++++++++--------------- source/dashboardNamingDialog.cpp | 2 +- source/dvieMainWindow.cpp | 16 ++++++++ source/dvieSecondaryWindow.cpp | 16 ++++++++ source/main.cpp | 10 +++-- source/messageDialog.cpp | 2 +- source/transparentMask.cpp | 2 +- 9 files changed, 88 insertions(+), 37 deletions(-) diff --git a/include/dvieMainWindow.h b/include/dvieMainWindow.h index ef41e49..e7fc637 100644 --- a/include/dvieMainWindow.h +++ b/include/dvieMainWindow.h @@ -9,6 +9,7 @@ class dvieMainWindow; } QT_END_NAMESPACE +class TransparentMask; class Dashboard; class DashboardFrame; class DvieSecondaryWindow; @@ -21,6 +22,9 @@ public: DvieMainWindow(QWidget *parent = nullptr); ~DvieMainWindow(); + void showTransparentMask(); + void hideTransparentMask(); + DashboardFrame* dashboardFrame(); DashboardFrame* getDashboardFrame(const QString&); void creatSecondaryWindowAndAddDashboard(QPoint, Dashboard*); @@ -28,6 +32,7 @@ public: private: Ui::dvieMainWindow* ui; + TransparentMask* m_pTransparentMask; DashboardFrame* m_pDashboardFrame; QHash m_hashSecondaryWindow; }; diff --git a/include/dvieSecondaryWindow.h b/include/dvieSecondaryWindow.h index 0e79dd0..928d1f8 100644 --- a/include/dvieSecondaryWindow.h +++ b/include/dvieSecondaryWindow.h @@ -9,6 +9,7 @@ class dvieSecondaryWindow; } QT_END_NAMESPACE +class TransparentMask; class DvieMainWindow; class Dashboard; class DashboardFrame; @@ -21,6 +22,9 @@ public: DvieSecondaryWindow(const QString&, QWidget *parent = nullptr); ~DvieSecondaryWindow(); + void showTransparentMask(); + void hideTransparentMask(); + QString name(); DashboardFrame* dashboardFrame(); DashboardFrame* getDashboardFrame(const QString&); @@ -32,6 +36,7 @@ protected: private: Ui::dvieSecondaryWindow* ui; + TransparentMask* m_pTransparentMask; QString m_strName; DvieMainWindow* m_pMainWindow; DashboardFrame* m_pDashboardFrame; diff --git a/source/dashboardFrame.cpp b/source/dashboardFrame.cpp index 1cb6e7c..0bf43b9 100644 --- a/source/dashboardFrame.cpp +++ b/source/dashboardFrame.cpp @@ -129,27 +129,49 @@ void DashboardFrame::dropEvent(QDropEvent* event) { Dashboard* dashboard = fromFrame->takeDashboard(strTabText); addDashboard(dashboard); - } } } void DashboardFrame::showTransparentMask() { + if(m_pParentWindow) //遮罩作为子组件最多只能在自身范围内覆盖,无法覆盖到父组件,因此需要父组件其它部分需要父组件去完成 + { + if(m_type == dashboardFrame::ft_main) + { + DvieMainWindow* dvieWindow = qobject_cast(m_pParentWindow); + if(dvieWindow) + dvieWindow->showTransparentMask(); + } + else if(m_type == dashboardFrame::ft_secondary) + { + DvieSecondaryWindow* dvieWindow = qobject_cast(m_pParentWindow); + if(dvieWindow) + dvieWindow->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->setGeometry(0, 0, this->width(), this->height()); m_pTransparentMask->show(); } void DashboardFrame::hideTransparentMask() { + if(m_type == dashboardFrame::ft_main) + { + DvieMainWindow* dvieWindow = qobject_cast(m_pParentWindow); + if(dvieWindow) + dvieWindow->hideTransparentMask(); + } + else if(m_type == dashboardFrame::ft_secondary) + { + DvieSecondaryWindow* dvieWindow = qobject_cast(m_pParentWindow); + if(dvieWindow) + dvieWindow->hideTransparentMask(); + } + if(m_pTransparentMask != nullptr && m_pTransparentMask->isVisible()) m_pTransparentMask->hide(); } @@ -164,13 +186,10 @@ void DashboardFrame::showMessageDialog(MessageDialogType type,const QString& str } 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; + int nX = (ui->navigationPanel->width() - m_pMessageDialog->width()) * 0.5; + int nY = ui->navigationPanel->y() + ui->navigationPanel->height() * 0.5; m_pMessageDialog->setGeometry(nX, nY, m_pMessageDialog->width(), m_pMessageDialog->height()); + m_pMessageDialog->raise(); if(type == type_question) m_pMessageDialog->exec(); else @@ -181,20 +200,6 @@ void DashboardFrame::addDashboard(const QString& strName) { Dashboard* dashboard = new Dashboard(strName); insertDashboard(m_listDashboard.count(), dashboard); - // 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::addDashboard(Dashboard* dashboard) { @@ -409,11 +414,11 @@ void DashboardFrame::onBtnClicked_addDashboard() } 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; + int nX = (ui->navigationPanel->width() - m_pDashboardNamingDialog->width()) * 0.5; + int nY = ui->navigationPanel->y() + ui->navigationPanel->height() * 0.5; m_pDashboardNamingDialog->setGeometry(nX, nY, m_pDashboardNamingDialog->width(), m_pDashboardNamingDialog->height()); m_pDashboardNamingDialog->showUsedForCreat(); + m_pDashboardNamingDialog->raise(); } void DashboardFrame::onBtnClicked_addDataPanel() diff --git a/source/dashboardNamingDialog.cpp b/source/dashboardNamingDialog.cpp index 2a33288..7b7f022 100644 --- a/source/dashboardNamingDialog.cpp +++ b/source/dashboardNamingDialog.cpp @@ -9,7 +9,7 @@ DashboardNamingDialog::DashboardNamingDialog(QWidget *parent) , ui(new Ui::dashboardNamingDialog) { ui->setupUi(this); - setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog); + setWindowFlags(Qt::FramelessWindowHint); setAttribute(Qt::WA_TranslucentBackground); m_strUsedFor = "create"; diff --git a/source/dvieMainWindow.cpp b/source/dvieMainWindow.cpp index cf66e0e..1b57333 100644 --- a/source/dvieMainWindow.cpp +++ b/source/dvieMainWindow.cpp @@ -1,5 +1,6 @@ #include "dvieMainWindow.h" #include "./ui_dvieMainWindow.h" +#include "transparentMask.h" #include "dashboardFrame.h" #include "dvieSecondaryWindow.h" #include @@ -7,6 +8,7 @@ DvieMainWindow::DvieMainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::dvieMainWindow) + , m_pTransparentMask(nullptr) , m_pDashboardFrame(nullptr) { @@ -22,6 +24,20 @@ DvieMainWindow::~DvieMainWindow() delete ui; } +void DvieMainWindow::showTransparentMask() +{ + if(m_pTransparentMask == nullptr) + m_pTransparentMask = new TransparentMask(this); + + m_pTransparentMask->setGeometry(ui->topWidget->geometry()); + m_pTransparentMask->show(); +} +void DvieMainWindow::hideTransparentMask() +{ + if(m_pTransparentMask != nullptr && m_pTransparentMask->isVisible()) + m_pTransparentMask->hide(); +} + DashboardFrame* DvieMainWindow::dashboardFrame() { return m_pDashboardFrame; diff --git a/source/dvieSecondaryWindow.cpp b/source/dvieSecondaryWindow.cpp index 3f16cbf..1b4ddb7 100644 --- a/source/dvieSecondaryWindow.cpp +++ b/source/dvieSecondaryWindow.cpp @@ -1,5 +1,6 @@ #include "dvieSecondaryWindow.h" #include "./ui_dvieSecondaryWindow.h" +#include "transparentMask.h" #include "dvieMainWindow.h" #include "dashboardFrame.h" #include @@ -8,6 +9,7 @@ DvieSecondaryWindow::DvieSecondaryWindow(const QString& strName, QWidget *parent : QMainWindow(parent) , ui(new Ui::dvieSecondaryWindow) , m_pMainWindow(nullptr) + , m_pTransparentMask(nullptr) , m_pDashboardFrame(nullptr) { @@ -26,6 +28,20 @@ DvieSecondaryWindow::~DvieSecondaryWindow() delete ui; } +void DvieSecondaryWindow::showTransparentMask() +{ + if(m_pTransparentMask == nullptr) + m_pTransparentMask = new TransparentMask(this); + + m_pTransparentMask->setGeometry(ui->topWidget->geometry()); + m_pTransparentMask->show(); +} +void DvieSecondaryWindow::hideTransparentMask() +{ + if(m_pTransparentMask != nullptr && m_pTransparentMask->isVisible()) + m_pTransparentMask->hide(); +} + void DvieSecondaryWindow::closeEvent(QCloseEvent* e) { if(m_pMainWindow) diff --git a/source/main.cpp b/source/main.cpp index e58d77f..de474cb 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -2,6 +2,7 @@ #include #include +#include int main(int argc, char *argv[]) { @@ -17,9 +18,12 @@ int main(int argc, char *argv[]) // int a = 1; // } - qputenv("QT_ENABLE_HIGHDPI_SCALING", "1"); - QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough); - QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); + QString osName = QSysInfo::productType(); + qDebug() << "Operating System Name:" << osName; + + // qputenv("QT_ENABLE_HIGHDPI_SCALING", "1"); + // QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough); + // QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); QApplication a(argc, argv); MainWindow w; diff --git a/source/messageDialog.cpp b/source/messageDialog.cpp index 2c3d73d..a6a9b29 100644 --- a/source/messageDialog.cpp +++ b/source/messageDialog.cpp @@ -6,7 +6,7 @@ MessageDialog::MessageDialog(QWidget *parent) , ui(new Ui::messageDialog) { ui->setupUi(this); - setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog | Qt::WindowDoesNotAcceptFocus); + setWindowFlags(Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus); setAttribute(Qt::WA_TranslucentBackground); ui->btnClose->setVisible(false); diff --git a/source/transparentMask.cpp b/source/transparentMask.cpp index 7f177e7..f34e979 100644 --- a/source/transparentMask.cpp +++ b/source/transparentMask.cpp @@ -6,7 +6,7 @@ TransparentMask::TransparentMask(QWidget *parent) , ui(new Ui::transparentMask) { ui->setupUi(this); - setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog | Qt::WindowDoesNotAcceptFocus); + setWindowFlags(Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus); setAttribute(Qt::WA_TranslucentBackground); }