From 7e465c3ab47841d594d9e4ab19f6527b7c526e2b Mon Sep 17 00:00:00 2001 From: zcy Date: Sat, 9 Apr 2022 21:02:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=89=8B=E5=8A=A8dpi?= =?UTF-8?q?=E9=80=82=E9=85=8D=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Qss.cpp | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++---- Qss.h | 5 ++++- 2 files changed, 63 insertions(+), 5 deletions(-) diff --git a/Qss.cpp b/Qss.cpp index 4ead9c3..62c1915 100644 --- a/Qss.cpp +++ b/Qss.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #define QSSDIALOG_SHADOW_WIDTH 12 #define QSSDIALOG_BODER_WIDTH 0 @@ -45,10 +46,10 @@ static void rangeObjectList(QObject*obj,int indent){ QssTtitleBar::QssTtitleBar(QWidget *parent , QTitleBar_Type type/* = QTitleBar_Type_Window*/) : QWidget(parent), + m_Main(nullptr), m_maxOrRestore(false), m_pressed(false), - m_type(type), - m_Main(nullptr) + m_type(type) { setObjectName("qssTitleBar"); m_closeBtn = new QPushButton(this); @@ -333,7 +334,8 @@ QssMainWindow::QssMainWindow(QWidget *parent/* = 0*/, Qt::WindowFlags flags/* = SIGNAL(logicalDotsPerInchChanged(qreal)), this,SLOT(LogicalDpiChange(qreal))); } - rangeObjectList(m_frame,0); +// rangeObjectList(m_frame,0); + detectDpi(); return; } @@ -342,6 +344,20 @@ QssMainWindow::~QssMainWindow() m_frame->deleteLater(); } +void QssMainWindow::AdapteDpi() +{ + QObjectList child = this->children(); + int i = 0; + for(int i = 0;i < child.size();i++){ + qDebug()<objectName() + " " + + child.at(i)->metaObject()->className(); + + if(child.at(i)->children().size() > 0){ + this->rangeObjectList(child.at(i),i + 1); + } + } +} + QWidget *QssMainWindow::TitleBar() { return m_titleBar; @@ -397,7 +413,6 @@ enum { BUTTOMRIGHT = 33 }; - void QssMainWindow::setCursorShape(int CalPos) { Qt::CursorShape cursor; @@ -592,6 +607,46 @@ void QssMainWindow::dpiScaleChildren() } +void QssMainWindow::detectDpi() +{ + m_dpi_ratio = this->logicalDpiX() / 96; +} + +void QssMainWindow::rangeObjectList(QObject *obj, int indent) +{ + QObjectList child = obj->children(); + QString tmp(""); + for(int i = 0;i < indent;i++) + tmp +=" "; + + for(int i = 0;i < child.size();i++){ + qDebug()<objectName() + " " + + child.at(i)->metaObject()->className(); + if(child.at(i)->metaObject()->className() =="QAction"){ + QAction *p = dynamic_cast(child.at(i)); + if(nullptr != p){ + + } + } + if(strcmp(child.at(i)->metaObject()->className(),"QLabel") == 0){ + QLabel *p = dynamic_cast(child.at(i)); + if(nullptr != p){ + p->setFixedHeight(p->height()*this->m_dpi_ratio); + } + } + if(child.at(i)->metaObject()->className() =="QLabel"){ + QLabel *p = dynamic_cast(child.at(i)); + if(nullptr != p){ + p->setFixedHeight(p->height()*this->m_dpi_ratio); + } + } + + if(child.at(i)->children().size() > 0){ + this->rangeObjectList(child.at(i),indent + 1); + } + } +} + void QssMainWindow::showEvent(QShowEvent *ev) { diff --git a/Qss.h b/Qss.h index ffe926c..a09cf00 100644 --- a/Qss.h +++ b/Qss.h @@ -130,7 +130,7 @@ public: } EVENT_CUSTOM; QssMainWindow(QWidget *parent = 0, Qt::WindowFlags flags = 0,float scale = 1); virtual ~QssMainWindow(); - + void AdapteDpi(); QWidget *TitleBar(); void RangeObject(); void DetectDpiChange(); @@ -156,6 +156,9 @@ private: void onMousePressEvent(QMouseEvent * ev); void onMouseReleaseEvent(QMouseEvent * ev); void dpiScaleChildren(); + void detectDpi(); + + void rangeObjectList(QObject*obj,int indent); protected: QFrame* m_frame; QRect mFrameRect;