当前位置: 首页 > news >正文

江门网站推广技巧付费服务器域名查询

江门网站推广技巧付费,服务器域名查询,寿光建设银行网站,花钱做网站注意些什么获取屏幕缩放比 网上很多代码是用 logicalDotsPerInch 除以 96 来获取屏幕缩放比: // Windows 除以 96,macOS 除以 72 qreal factor window->screen()->logicalDotsPerInch() / 96.0; 当使能了缩放适配后,logicalDotsPerInch 值就不…

获取屏幕缩放比

网上很多代码是用 logicalDotsPerInch 除以 96 来获取屏幕缩放比:

// Windows 除以 96,macOS 除以 72
qreal factor = window->screen()->logicalDotsPerInch() / 96.0;

当使能了缩放适配后,logicalDotsPerInch 值就不随系统缩放变了:

#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)// Qt6 默认开启缩放QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
#endif

如果是 PassThrough 支持小数的设置,此时可以用 QScreen 的 devicePixelRatio 获取缩放比。

很明显,我们需要更通用的方式。通过查看源码,发现其实 Qt 内部是有对应接口的,比如 QHighDpiScaling 类的接口:

qreal QHighDpiScaling::rawScaleFactor(const QPlatformScreen *screen)
{// Determine if physical DPI should be usedstatic const bool usePhysicalDpi = qEnvironmentVariableAsBool(usePhysicalDpiEnvVar, false);// Calculate scale factor beased on platform screen DPI valuesqreal factor;QDpi platformBaseDpi = screen->logicalBaseDpi();if (usePhysicalDpi) {QSize sz = screen->geometry().size();QSizeF psz = screen->physicalSize();qreal platformPhysicalDpi = ((sz.height() / psz.height()) + (sz.width() / psz.width())) * qreal(25.4 * 0.5);factor = qreal(platformPhysicalDpi) / qreal(platformBaseDpi.first);} else {const QDpi platformLogicalDpi = QPlatformScreen::overrideDpi(screen->logicalDpi());factor = qreal(platformLogicalDpi.first) / qreal(platformBaseDpi.first);}return factor;
}

其中  usePhysicalDpi 一般我们也用不到,所以可以直接用 else 部分的逻辑。不过这里用到了 QPlatformScreen 类,需要引入 gui-private 模块:

QT += core gui widgets 
QT += gui-private

简单的测试:

void MainWindow::calcDpi()
{// 可以从 QWidget 或者 QWindow 拿到 QScreen 对象QScreen *cur_screen = this->screen();qDebug()<<__FUNCTION__<<cur_screen;if (cur_screen) {// 逻辑 dpi (logicalBaseDpi().first) 默认值 win 96/ mac 72const QDpi base_dpi = cur_screen->handle()->logicalBaseDpi();const QDpi logic_dpi = QPlatformScreen::overrideDpi(cur_screen->handle()->logicalDpi());// 得到屏幕缩放百分比const qreal factor = qreal(logic_dpi.first) / qreal(base_dpi.first);qDebug()<<"calc dpi"<<factor;}
}

关联屏幕设置变化

当在多个屏幕拖动,或者修改当前屏幕缩放比后,我们需要重新获取缩放比。

QWindow 提供了 screenChanged 信号可以感知屏幕切换。

QScreen 提供了 physicalDotsPerInchChanged 和 logicalDotsPerInchChanged 信号可以感知分辨率变化。

在 Widgets 中的大致代码就是:

void MainWindow::initWindow()
{qDebug()<<this->winId();// 构造的时候 windowHandle 还未初始化,可以等 show 的时候关联,或者先调用一次 winIdconnect(this->windowHandle(), &QWindow::screenChanged, this, &MainWindow::onScreenChange);calcDpi();
}void MainWindow::onScreenChange(QScreen *screen)
{// QMetaObject::Connection 保存连接便于释放;if (logicalDpiConnection) {disconnect(physicalDpiConnection);disconnect(logicalDpiConnection);}if (screen) {// 切换缩放比时,EnableHighDpiScaling 会触发 physicalDotsPerInchChanged// 此时 Qt6 不触发 logicalDotsPerInchChangedphysicalDpiConnection = connect(screen, &QScreen::physicalDotsPerInchChanged, this, &MainWindow::calcDpi);logicalDpiConnection = connect(screen, &QScreen::logicalDotsPerInchChanged, this, &MainWindow::calcDpi);calcDpi();}
}void MainWindow::calcDpi()
{// 可以从 QWidget 或者 QWindow 拿到 QScreen 对象QScreen *cur_screen = this->screen();qDebug()<<__FUNCTION__;if (cur_screen) {// 逻辑 dpi (logicalBaseDpi().first) 默认值 win 96/ mac 72const QDpi base_dpi = cur_screen->handle()->logicalBaseDpi();const QDpi logic_dpi = QPlatformScreen::overrideDpi(cur_screen->handle()->logicalDpi());// 得到屏幕缩放百分比const qreal factor = qreal(logic_dpi.first) / qreal(base_dpi.first);qDebug()<<"calc dpi"<<factor;}
}

完成示例代码:

QWidget 获取 DPI 缩放:https://github.com/gongjianbo/MyTestCode/tree/master/Qt/TestQt_20231221_Dpi

QML 获取 DPI 缩放:

https://github.com/gongjianbo/MyTestCode/tree/master/Qml/TestQml_20231221_Dpi

http://www.15wanjia.com/news/23932.html

相关文章:

  • 做o2o平台网站需要多少钱深圳seo推广外包
  • 公司网站代码模板下载网络营销推广公司有哪些
  • 如何查询网站历史快照seo网站优化培训怎么做
  • erp排名前十的软件app排名优化公司
  • 网站怎么做的支付宝接口曹操论坛seo
  • 贵阳专业做网站公司新浪微指数
  • 温州网站建设制作设计公司河南seo外包
  • 网站建设合作合同模板一元友情链接平台
  • 昆明网站开发的公司seo作弊
  • html网站的直播怎么做创建网站免费注册
  • 软件开发项目管理文档网站seo外包
  • 做建材哪个网站平台好搜索引擎营销的特点有
  • 相亲网站怎么做百度seo学院
  • 企业宣传片汇报片拍摄网站seo李守洪排名大师
  • 做网站的一个月能赚多少钱网站测试的内容有哪些
  • 帝国cms 仿站 wordpress做app推广去哪找商家
  • 2022百度seo优化工具徐州seo企业
  • 长景园林这个网站谁做的北京seo全网营销
  • 连云港权威网站优化服务厦门网站制作全程服务
  • 网站开发哈尔滨网站开发公司cba最新排名
  • app制作下载宁波网站制作优化服务
  • 平面设计接单攻略电子书长沙网站优化体验
  • 网站除了做流量还需要什么软件吗足球比赛直播2021欧冠决赛
  • 岳阳seo杭州网站优化企业
  • 网站开发的数据新东方线下培训机构官网
  • 做网站搞友情链接网络广告策划案
  • 武汉网站制作 app开发运营商推广5g技术
  • 网站建设谈判技巧搜索引擎优化的技巧有哪些
  • 网站怎么做免费推广上海网络营销seo
  • 网站建设开发流程竞价托管一般要多少钱