近段时间开发需求,升级了电脑。换了高分的win11,发现分辨率高字体太小很难看,只能设置缩放比例2倍。
发现原来Qt编译出来的界面走形了
参考:Qt适配Windows缩放_FlyWM_的博客-CSDN博客_qt 缩放
解决了缩放问题,改善效果对比如下:(文末附下载)
附上解决的代码供参考:
一 .h文件包含
#include "AutoScreenZoom/autoscreenzoom.h"
二 .h文件定义
private:
AutoScreenZoom screenzoom;
三 .cpp文件使用
//3.1 包含
#include <QScreen>
//3.2 获取屏幕参数并关联到曹
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QList<QScreen*> screens = QApplication::screens();
if (screens.size() > 0) {
QScreen* screen = screens[0];
connect(screen, SIGNAL(logicalDotsPerInchChanged()), &screenzoom, SLOT(onLogicalDotsPerInchChanged()));
}
}
四 调整缩放H文件内容
#ifndef AUTOSCREENZOOM_H
#define AUTOSCREENZOOM_H
#include <QWidget>
class AutoScreenZoom : public QWidget
{
Q_OBJECT
public:
explicit AutoScreenZoom(QWidget *parent = nullptr);
void AutoChildZoom(const QObject &o);
double m_preRate;
double m_scaleFromPreRate;
public slots:
void onLogicalDotsPerInchChanged(qreal dpi);
};
#endif // AUTOSCREENZOOM_H
五 调整缩放CPP文件内容
#include "autoscreenzoom.h"
AutoScreenZoom::AutoScreenZoom(QWidget *parent) : QWidget(parent)
{
}
void AutoScreenZoom::onLogicalDotsPerInchChanged(qreal dpi)
{
m_scaleFromPreRate = (double)dpi / 96 / m_preRate;
m_preRate = (double)dpi / 96;
AutoChildZoom(*this);
}
void AutoScreenZoom::AutoChildZoom(const QObject &o)
{
for (int i=0; i<o.children().size(); ++i) {
QWidget *pWidget = qobject_cast<QWidget *>(o.children().at(i));
if (pWidget != nullptr) {
pWidget->resize(pWidget->width()*m_scaleFromPreRate, pWidget->height()*m_scaleFromPreRate);
AutoChildZoom(*(o.children().at(i)));
}
}
}
方便大家使用,这里放上打包好的代码下载