日志
关于缩放的处理收藏
2021-07-25 02:27
//处理缩放
#include <QScreen> //处理缩放 public Q_SLOTS: void onLogicalDotsPerInchChanged(qreal dpi); private: void findChild(const QObject &o); int scaleUI(int spec); private: double m_preRate; double m_scaleFromPreRate; //处理缩放 ui->next->resize(scaleUI(93), scaleUI(28)); ui->play->resize(scaleUI(186), scaleUI(56)); ui->tableWidget->resize(scaleUI(93), scaleUI((28))); QList<QScreen*> screens = QApplication::screens(); if (screens.size() > 0) { QScreen* screen = screens[0]; connect(screen, &QScreen::logicalDotsPerInchChanged, this, &Widget::onLogicalDotsPerInchChanged); } //处理缩放 void Widget::onLogicalDotsPerInchChanged(qreal dpi) { m_scaleFromPreRate = (double)dpi / 96 / m_preRate; m_preRate = (double)dpi / 96; findChild(*this); } void Widget::findChild(const QObject &o) { for (int i=0; i<o.children().size(); ++i) { QWidget *pWidget = qobject_cast<QWidget *>(o.children().at(i)); if (pWidget != nullptr) { qDebug() << pWidget->width() << pWidget->height(); pWidget->resize(pWidget->width()*m_scaleFromPreRate, pWidget->height()*m_scaleFromPreRate); findChild(*(o.children().at(i))); } } } int Widget::scaleUI(int spec) { double rate = 0; if (0 == (int)rate) { QList<QScreen*> screens = QApplication::screens(); if (screens.size() > 0) { QScreen* screen = screens[0]; double dpi = screen->logicalDotsPerInch(); rate = dpi / 96.0; if (rate < 1.1) { rate = 1.0; } else if (rate < 1.4) { rate = 1.25; } else if (rate < 1.6) { rate = 1.5; } else if (rate < 1.8) { rate = 1.75; } else { rate = 2.0; } } } m_preRate = rate; return int(spec * rate); } |
下一篇: Win10完美去除桌面快捷图标小箭头
上一篇: C语言实现通过宏来获取数组大小