From 4490a55f31ac82cc60b41466b5c4cec552dcd1e3 Mon Sep 17 00:00:00 2001 From: zcy <290198252@qq.com> Date: Wed, 19 Jan 2022 10:38:35 +0800 Subject: [PATCH 1/4] no message --- Qss.cpp | 32 ++++++++++++++++++++++++-------- Qss.h | 21 +++++++-------------- 2 files changed, 31 insertions(+), 22 deletions(-) diff --git a/Qss.cpp b/Qss.cpp index ce9f7c5..9ffae93 100644 --- a/Qss.cpp +++ b/Qss.cpp @@ -247,7 +247,6 @@ void QssMainWindow::OnMaxOrRestore(bool max) setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)); this->m_frame->setMinimumSize(0, 0); this->m_frame->setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)); - QSize sizeHint = parentWidget()->sizeHint(); QDesktopWidget desktop; QRect rc = desktop.availableGeometry(-1); @@ -259,12 +258,23 @@ void QssMainWindow::OnMaxOrRestore(bool max) this->setFixedHeight(rc.height() - m_titleBar->height()); } } - -void QssMainWindow::DpiChange(qreal dpi) +// 实际测试切换分辨率会触发这个slot +void QssMainWindow::PhisycalDpiChange(qreal dpi) { - qDebug()<<"change dpi of QssMainWindow"<parentWidget(); + parent->setGeometry(parent->geometry().x(),parent->geometry().y(), + parent->geometry().width()*m_dpi_ratio, + parent->geometry().height()*m_dpi_ratio); +} QssMainWindow::QssMainWindow(QWidget *parent/* = 0*/, Qt::WindowFlags flags/* = 0*/,float scale) @@ -317,7 +327,11 @@ QssMainWindow::QssMainWindow(QWidget *parent/* = 0*/, Qt::WindowFlags flags/* = if(nullptr != mCurrentScreen){ connect(mCurrentScreen, SIGNAL(physicalDotsPerInchChanged(qreal)), - this,SLOT(DpiChange(qreal))); + this,SLOT(PhisycalDpiChange(qreal))); + + connect(mCurrentScreen, + SIGNAL(logicalDotsPerInchChanged(qreal)), + this,SLOT(LogicalDpiChange(qreal))); } rangeObjectList(m_frame,0); return; @@ -333,6 +347,11 @@ QWidget *QssMainWindow::TitleBar() return m_titleBar; } +void QssMainWindow::RangeObject() +{ + rangeObjectList(m_frame,0); +} + void QssMainWindow::DetectDpiChange() { int screenNum = qApp->desktop()->screenNumber(this); @@ -428,7 +447,6 @@ void QssMainWindow::showNormal() void QssMainWindow::setWindowTitle( QString title ) { - //m_frame->setWindowTitle(title); m_titleBar->setTitle(title); } @@ -467,8 +485,6 @@ void QssMainWindow::onMouseMoveEvent(QMouseEvent * ev) setCursorShape(CalCursorPos(ev->pos(),CalCursorCol(ev->pos()))); } QPoint ptCurrentPos = QCursor::pos(); - QPoint ptMoveSize = ptCurrentPos - m_ptViewMousePos; - QRect rtTempGeometry = this->geometry(); QRect rtCentralGeo = this->centralWidget()->geometry(); QRect rtMainWindow = this->geometry(); setCursor(Qt::ArrowCursor); diff --git a/Qss.h b/Qss.h index 38c0ad3..ffe926c 100644 --- a/Qss.h +++ b/Qss.h @@ -26,7 +26,9 @@ class QPushButton; class QLabel; class QMouseEvent; + #define STANDARD_DPI 96.0 + #ifndef WM_DPICHANGED #define WM_DPICHANGED 0x02e0 #endif @@ -108,19 +110,7 @@ class QssEventFilter { public: virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *) Q_DECL_OVERRIDE - {/* - MSG* pMsg = reinterpret_cast(message); - if(nullptr != pMsg){ - switch (pMsg->message) - { - case WM_DPICHANGED: - { - qDebug()<<"DPI CHANGED"; - - } - } - }*/ - // TODO: filter out or modify msg struct here + { return false; } }; @@ -131,7 +121,9 @@ class QssMainWindow : public QMainWindow public slots: void OnMaxOrRestore(bool max); - void DpiChange(qreal); + void PhisycalDpiChange(qreal); + void LogicalDpiChange(qreal); + public: typedef enum{ EVENT_MOVE = 523, @@ -140,6 +132,7 @@ public: virtual ~QssMainWindow(); QWidget *TitleBar(); + void RangeObject(); void DetectDpiChange(); void ShowMask(); void HideMask(); From d3139ba09089c2ce3acc08a61160c16020b3d271 Mon Sep 17 00:00:00 2001 From: zcy <290198252@qq.com> Date: Fri, 11 Feb 2022 17:01:02 +0800 Subject: [PATCH 2/4] no message --- Qss.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Qss.cpp b/Qss.cpp index 9ffae93..4ead9c3 100644 --- a/Qss.cpp +++ b/Qss.cpp @@ -176,9 +176,9 @@ void QssTtitleBar::mouseMoveEvent( QMouseEvent * ev ) QPoint movePt = globalPt - m_pressedPos; parentWidget()->move(movePt); QssMainWindow *parent = static_cast(parentWidget()); - if(nullptr != parent){ - parent->DetectDpiChange(); - } +// if(nullptr != parent){ +// parent->DetectDpiChange(); +// } return ; } @@ -270,10 +270,10 @@ void QssMainWindow::LogicalDpiChange(qreal dpi) qDebug()<<"dpi changed,reason: configuration "<parentWidget(); - parent->setGeometry(parent->geometry().x(),parent->geometry().y(), - parent->geometry().width()*m_dpi_ratio, - parent->geometry().height()*m_dpi_ratio); +// auto parent = this->parentWidget(); +// parent->setGeometry(parent->geometry().x(),parent->geometry().y(), +// parent->geometry().width()*m_dpi_ratio, +// parent->geometry().height()*m_dpi_ratio); } From 7e465c3ab47841d594d9e4ab19f6527b7c526e2b Mon Sep 17 00:00:00 2001 From: zcy Date: Sat, 9 Apr 2022 21:02:25 +0800 Subject: [PATCH 3/4] =?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; From 3daad474a6872ef52e0a197d26718ba59348c059 Mon Sep 17 00:00:00 2001 From: zcy <290198252@qq.com> Date: Sun, 10 Apr 2022 02:54:04 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E9=80=82=E9=85=8D?= =?UTF-8?q?=E6=95=88=E6=9E=9Cok1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Qss.cpp | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 85 insertions(+), 8 deletions(-) diff --git a/Qss.cpp b/Qss.cpp index 62c1915..ef2acf2 100644 --- a/Qss.cpp +++ b/Qss.cpp @@ -25,6 +25,12 @@ #include #include #include +#include +#include +#include +#include +#include +#include #define QSSDIALOG_SHADOW_WIDTH 12 #define QSSDIALOG_BODER_WIDTH 0 @@ -346,12 +352,20 @@ QssMainWindow::~QssMainWindow() void QssMainWindow::AdapteDpi() { - QObjectList child = this->children(); + QObjectList child = this->m_frame->children(); int i = 0; for(int i = 0;i < child.size();i++){ qDebug()<objectName() + " " + child.at(i)->metaObject()->className(); + // QssTtitleBar + if(child.at(i)->objectName() =="qssTitleBar"){ + QssTtitleBar *p = dynamic_cast(child.at(i)); + if(nullptr != p){ + qDebug()<< p->sizePolicy(); + p->setFixedHeight(p->height()*m_dpi_ratio); + } + } if(child.at(i)->children().size() > 0){ this->rangeObjectList(child.at(i),i + 1); } @@ -609,7 +623,9 @@ void QssMainWindow::dpiScaleChildren() void QssMainWindow::detectDpi() { - m_dpi_ratio = this->logicalDpiX() / 96; + int logicdpi = logicalDpiX(); + m_dpi_ratio = this->logicalDpiX() / 96.0; + } void QssMainWindow::rangeObjectList(QObject *obj, int indent) @@ -622,23 +638,84 @@ void QssMainWindow::rangeObjectList(QObject *obj, int indent) 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(child.at(i)->metaObject()->className() =="QssTtitleBar"){ + QssTtitleBar *p = dynamic_cast(child.at(i)); + if(nullptr != p){ + p->setMinimumSize(p->width()*m_dpi_ratio, + p->height()*m_dpi_ratio); } } + + if(child.at(i)->metaObject()->className() =="QMenuBar"){ + QMenuBar *p = dynamic_cast(child.at(i)); + if(nullptr != p){ + p->setMinimumSize(p->width()*m_dpi_ratio, + p->height()*m_dpi_ratio); + } + continue; + + } + if(child.at(i)->metaObject()->className() =="QDateTimeEdit"){ + QDateTimeEdit *p = dynamic_cast(child.at(i)); + if(nullptr != p){ + p->setMinimumSize(p->minimumHeight()*m_dpi_ratio, + p->minimumHeight()*m_dpi_ratio); + } + continue; + } 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); + qDebug()<< "parent is " + << p->parent()->metaObject()->className(); + + if(p->parent() != nullptr){ + QWidget *wparent = dynamic_cast (p->parent()); + if(nullptr != wparent){ + if(nullptr != wparent->layout()){ + qDebug()<< "index of label in layout is " + <layout()->indexOf(p); + } + } + } + QFont pf = p->font(); + pf.setPointSize(pf.pointSize()*this->m_dpi_ratio); + p->setFont(pf); + p->setMinimumSize(p->minimumHeight()*m_dpi_ratio, + p->minimumHeight()*m_dpi_ratio); } + + continue; } - if(child.at(i)->metaObject()->className() =="QLabel"){ - QLabel *p = dynamic_cast(child.at(i)); + if(strcmp(child.at(i)->metaObject()->className(),"QComboBox") == 0){ + QComboBox *p = dynamic_cast(child.at(i)); + p->setMinimumSize(p->width()*m_dpi_ratio, + p->height()*m_dpi_ratio); + continue; + } + + if(strcmp(child.at(i)->metaObject()->className(),"QPushButton") == 0){ + + QPushButton *p = dynamic_cast(child.at(i)); + qDebug()<objectName() + " " + + child.at(i)->metaObject()->className() << p->size(); + if(nullptr != p){ + p->setFixedHeight(p->height()*m_dpi_ratio); + p->setMinimumWidth(p->width()*m_dpi_ratio); + + } + continue; + } + + if(strcmp(child.at(i)->metaObject()->className(),"QLineEdit") == 0){ + QLineEdit *p = dynamic_cast(child.at(i)); if(nullptr != p){ p->setFixedHeight(p->height()*this->m_dpi_ratio); + QFont pf = p->font(); } + continue; } if(child.at(i)->children().size() > 0){