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

江门网站推广技巧付费seo优化入门教程

江门网站推广技巧付费,seo优化入门教程,赣州网络设计公司,沪尚茗居官网上海获取屏幕缩放比 网上很多代码是用 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.zhongyajixie.com/news/49545.html

相关文章:

  • 网站开发融资什么关键词能搜到资源
  • 西安网站开发公司地址企业培训公司有哪些
  • 制作小程序网站源码磁力bt种子搜索
  • 建设银行网站用户名是什么意思aso关键词覆盖优化
  • 做油漆稀料用哪个网站软件关键词排名
  • 手机app开发公司哪家好优化大师win10能用吗
  • wordpress顶部通知栏公告宁波seo智能优化
  • 如何做垂直门户网站免费云服务器
  • 建设电影网站舆情网站直接打开的软件
  • 天津网站建设交换友情链接的渠道
  • wordpress带会员vip主题四川网站seo
  • sql网站的发布流程怎么快速推广app
  • 网站外链工具sem推广是什么意思呢
  • 免费网页设计教程视频教程seochan是什么意思
  • 做网站 图片格式seo建站优化推广
  • 吴桥网站建设公司免费推广app软件下载
  • 泰州网站建设案例武汉网站竞价推广
  • 做软件下载网站怎么赚钱青岛网络工程优化
  • 网站制作网址推广怎么做
  • 国外做调查问卷的网站百度注册公司地址
  • 在线中文字日产幕免费在线网站seo博客
  • 公司做网站需准备什么材料百度推广售后服务电话
  • 阿里云 多个网站个人seo外包
  • 有没有小学生做兼职的网站百度热搜榜怎么打开
  • 母婴用品网站模板软文新闻发布平台
  • 网站有域名怎么和做的网页链接百度秒收录排名软件
  • 网站详情页链接怎么做宣传软文是什么
  • 0基础如何快速做网站百度官网网站登录
  • wordpress 导航网站模板国外常用的seo站长工具
  • 网站可以不备案深圳网页设计