Qt 您所在的位置:网站首页 快速缩放页面显示大小的方法是 Qt

Qt

2024-07-11 14:57| 来源: 网络整理| 查看: 265

前提

在早几年前,PC的显示屏幕几乎是1920*1080、1680*1050这两种规格,对于PC的window界面开发人员来说,页面也都是按照屏幕大小进行设计的。但是这种根据屏幕大小进行界面设计的方式已经受到了很大限制!

近年来,显示屏的尺寸越来越多样化,PC开发的程序肯定不能再和之前一样了,那么该如何让PC开发的程序进行自适应屏幕呢?

功能实现 1:使用Qt自带的弹框功能。

优点:可以根据页面自动等比例拉伸控件。

缺点:对于new出来的控件,新手很不容易掌握,new出来的弹框不容易控制。

2:对现有的控件根据屏幕进行区域缩放。

这种方式是最快捷修改程序的。只需要计算出程序与屏幕的缩放系统,对每个控件的位置进行等比缩放,就能实现。很好的兼容以往程序。

今天主要是讲解如何使用第二种方式。

2.1:获取显示屏幕的大小

在main.cpp中获取当前显示屏的大小以及连接了几块显示屏幕

RECT SceenRect[2]{ (0,0,0,0), (0,0,0,0) }; BOOL CALLBACK Monitorenumproc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) { static BOOL first = FALSE; //重复检测标志 //保存显示器信息 MONITORINFO monitorinfo; monitorinfo.cbSize = sizeof(MONITORINFO); //获得显示器信息,将信息保存到monitorinfo中 GetMonitorInfo(hMonitor, &monitorinfo); //若检测到主屏 if (monitorinfo.dwFlags == MONITORINFOF_PRIMARY) { if (!first) //第一次检测到主屏 { first = TRUE; SceenRect[0] = monitorinfo.rcWork;//将显示器的分辨率信息保存到rect return TRUE; } else //第二次检测到主屏,说明所有的监视器都已经检测了一遍,故可以停止检测了 { first = FALSE; //标志复位 return FALSE; //结束检测 } } else { SceenRect[1] = monitorinfo.rcMonitor;//第二块屏幕信息 } return TRUE; } int main(int argc, char *argv[]) { QApplication::setAttribute(Qt::AA_UseOpenGLES); QApplication a(argc, argv); EnumDisplayMonitors(NULL, NULL, Monitorenumproc, 0);//获取所有屏幕的信息 //实际实现代码... } 2.2:计算缩放比

默认按照屏幕大小是:1920*1080进行缩放

float fScareFactor = rectScreen.width()/1920.0; 2.3:缩放控件以及窗口

设置计算缩放区域的函数

QRect ScaleGeometry(int x, int y, int w, int h) { //计算,缩放区域 int nLeft = std::round(x * fScareFactor); int nTop = std::round(y * fScareFactor); int nWidth = std::round(w * fScareFactor); int nHeight = std::round(h * fScareFactor); QRect rect(nLeft, nTop, nWidth, nHeight); return rect; }

控件区域设置:

ui.btnTest->setGeometry(ScaleGeometry(10, 10, 100, 60));

在这里需要注意:

一定要使用std::round()方法进行四舍五入。

使用这种方式修改程序快捷,无需再添任何控件设置。对于老项目也能快速修改。

我是糯诺诺米团,一名C++开发程序媛~



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有