首页 > 编程语言 >在开发直播系统源码中如何自适应调整ui

在开发直播系统源码中如何自适应调整ui

时间:2023-08-14 15:45:12浏览次数:36  
标签:界面 screen 直播 ui 屏幕 源码 DPI

直播系统源码开发时,一个好看的UI界面能吸引大量的用户,用户于APP建立联系的第一感官不是功能,而是UI的界面,我们在设计不仅要注重创意,更要注重UI界面的适配让不同尺寸的手机都能完美适配,在开发直播系统源码中如何自适应调整ui就显得尤为重要。

根据界面所在显示器自适应调整ui大小

直播系统源码开发时获取屏幕信息

使用QDesktopWidget、QApplication::screens()等获取屏幕宽高、DPI等信息,详见上一篇概述。

直播系统源码开发时设置界面元素的大小类型

我们需要将窗口、布局和控件的大小类型(size type)设置为相对单位,如:

1、设置窗口的尺寸策略为Qt::SizePolicy::Expanding

2、使用setBaseSize() + setSizeIncrement() 使窗口大小可根据屏幕比例增长

3、使用 percentages 而不是像素为布局和控件设置大小

4、使用em/pt等相对单位代替硬编码的像素值

例如:

 

window->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); 
window->setBaseSize(500, 400);
window->setSizeIncrement(0.2, 0.2); // 窗口大小每次增加20%
layout->setContentsMargins(20%, 10%, 10%, 10%);
label->setMinimumSize(3em, 1em);

 

直播系统源码开发时根据DPI和屏幕比例调整界面元素大小

我们可以根据screens()遍历所有屏幕,并根据每个屏幕的DPI和宽高比例相应调整窗口、布局和控件大小。

例如:

QList<QScreen*> screens = QApplication::screens();
for (QScreen* screen : screens) {
    qreal dpi = screen->logicalDotsPerInch();
    qreal ratio = (qreal)screen->geometry().height() / screen->geometry().width();
    
    // 根据DPI和ratio调整窗口大小
    int baseWidth = 500 * dpi / 96;     // 96 is Qt's default logical DPI 
    int baseHeight = baseWidth * ratio;
    window->setBaseSize(baseWidth, baseHeight);
    
    // 根据DPI调整padding
    int padding = 20 * dpi / 96;
    layout->setContentsMargins(padding, ...);  
    
    // ...
}

直播系统源码开发时根据屏幕变化动态更新界面

我们需要监听屏幕变化的信号,如:

- QDesktopWidget::screenCountChanged()
- QScreen::geometryChanged()
- QScreen::logicalDotsPerInchChanged()
并在相应的槽函数中重新根据当前屏幕信息调整界面大小。
例如:
cpp
void onScreenCountChanged() {
    // 获取当前屏幕信息,重新调整窗口大小
    // ...  
}
void onScreenGeomtryChanged(QScreen *screen) {
    // 获取screen的新信息,根据比例/DPI重新调整界面 
    // ... 

// 连接信号槽   
connect(QApplication::desktop(), &QDesktopWidget::screenCountChanged, 
        this, &Window::onScreenCountChanged);
for (QScreen* screen : QApplication::screens()) {
    connect(screen, &QScreen::geometryChanged, 
            this, &Window::onScreenGeomtryChanged);  
}

所以,总结来说,要实现根据屏幕信息动态调整界面大小,主要需要:

获取屏幕信息(DPI、宽高比等)

将界面元素大小设置为相对单位

根据屏幕信息计算并设置界面元素的基本大小

监听屏幕变化信号,动态更新界面

如果有多个屏幕,需要对每个屏幕进行上述步骤

理解这一屏幕适配过程和各项技术的应用,可以让我们的在开发直播系统源码中具备很好的兼容性,为用户提供更好的视觉体验。

动态调整界面大小也是响应式布局的重要内容之一。

以上就是 在开发直播系统源码中如何自适应调整ui,更多内容欢迎关注之后的文章。

标签:界面,screen,直播,ui,屏幕,源码,DPI
From: https://www.cnblogs.com/yunbaomengnan/p/17628813.html

相关文章

  • 【Spring Cloud 】智慧建筑工地平台源码
    智慧工地源码智慧工地云平台源码智慧建筑源码支持私有化部署,提供SaaS+硬件设备+运维全套服务互联网+建筑工地,是将互联网+的理念和技术引入建筑工地,从施工现场源头抓起,最大程度的收集人员、安全、环境、材料等关键业务数据,依托物联网、互联网,建立云端大数据管理平台,形成“端+云+......
  • 使用 Amazon MemoryDB for Redis 作为 JuiceFS 的元数据引擎
    概览JuiceFS 是一款面向云原生设计的高性能共享文件系统,在Apache2.0开源协议下发布。JuiceFS提供完备的 POSIX 兼容性,可将几乎所有对象存储接入本地作为海量本地磁盘使用,亦可同时在跨平台、跨地区的不同主机上挂载读写。JuiceFS也提供如HDFS兼容的API、S3兼容的API......
  • 问题解答:关于 SAP UI5 控制器(Controller) JavaScript 编码里单引号和双引号的用法澄
    笔者这篇教程文末,有朋友提问:SAPUI5应用开发教程之十-什么是SAPUI5应用的描述符文件manifest.json问题1:在index.html文件中body标签添加了代码:<divdata-sap-ui-componentdata-name="sap.ui5.walkthrough"data-id="container"data-settings='{"id":"wa......
  • SAP UI5 XML 视图里解析 Extension Point 的触发点
    解析到XML视图里的ExtensionPoint定义后,开始实例化过程:Extensionpoint的工作原理是在原有的应用中预定义一些扩展点,然后开发者可以在这些扩展点插入自定义的组件或代码,以实现新的功能。这种机制的优点是可以保持原有应用的稳定性,同时也方便进行扩展和维护。具体来说,SAPU......
  • SAP UI5 框架 Manifest.js 里 getObject 函数的实现解析
    我们在SAPUI5manifest.json文件里定义的配置信息,通过下图Manifest.js文件里的getObject函数返回给消费者。这是一个名为getObject的JavaScript函数,主要用于通过给定的路径访问对象的子成员。下面是这段代码的中文注释:/***通过给定路径访问一个对象的子成员的实......
  • SAP UI5 manifest.json 里定义的 sap.ui.viewExtensions 区域的解析代码位置
    笔者这篇教程介绍了如何在SAPFioriElements应用的manifest.json里注册Extensionfragment,从而给ListReport应用的Table区域新增自定义列:10.如何通过扩展(Extension)的方式给SAPFioriElementsListReport的表格新增列上图extends区域注册的Extension信......
  • SAP UI5 manifest.json 文件里 extends 区域的内容是如何被解析的
    笔者这篇教程介绍了如何在SAPFioriElements应用的manifest.json里注册Extensionfragment,从而给ListReport应用的Table区域新增自定义列:10.如何通过扩展(Extension)的方式给SAPFioriElementsListReport的表格新增列我浏览器打开了SAPFioriElements应......
  • Druid连接池更换Guess数据源
    目录1.遇到的问题2.更换数据源操作步骤1.添加pom依赖2.更改jdbc.properties3.初始化Druid连接池1.遇到的问题工作中有个db国产化的需求,需要在一个老项目中把DB从mysql更换为openGuess,将对应的驱动和Druid数据源改造后启动程序报错如下:java.lang.IllegalStateException:dbTy......
  • 实践教程|源码级理解Pytorch中的Dataset和DataLoader
    前言 本文30分钟带你达到对Pytorch中的Dataset和DataLoader的源码级理解,并提供构建数据管道的3种常用方式的范例,扫除你构建数据管道的一切障碍。本文转载自算法美食屋作者|梁云1991仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最......
  • 微信小程序源码
    微信小程序demo:足球,赛事分析小程序简易导航小程序demo:办公审批小程序Demo:电魔方小程序demo:借阅伴侣微信小程序demo:投票微信小程序demo:健康生活小程序demo:文章列表demo微商城(含微信小程序)完整源码+配置指南微信小程序Demo:一个简单的工作系统微信小程序Demo:用于聚会的小程序微信小程......